xref: /trunk/main/cui/source/tabpages/connect.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_cui.hxx"
30 
31 // include ---------------------------------------------------------------
32 #include <sfx2/app.hxx>
33 #include <sfx2/module.hxx>
34 #include <tools/shl.hxx>
35 #include "svx/ofaitem.hxx"  // add CHINA001
36 #include <sfx2/request.hxx> // add CHINA001
37 #include <svx/dialogs.hrc>
38 
39 #define _SVX_CONNECT_CXX
40 
41 #include <svx/svdoedge.hxx>
42 #include <svx/svdattr.hxx>
43 #include <svx/svdattrx.hxx>
44 #include <svx/svdview.hxx>
45 
46 #include "svx/connctrl.hxx"
47 #include "connect.hxx"
48 #include "connect.hrc"
49 #include <dialmgr.hxx>
50 #include "svx/dlgutil.hxx"
51 
52 #include "paragrph.hrc"
53 #include <cuires.hrc>
54 
55 static sal_uInt16 pRanges[] =
56 {
57     SDRATTR_EDGE_FIRST,
58     SDRATTR_EDGE_LAST,
59     0
60 };
61 
62 /*************************************************************************
63 |*
64 |* Dialog zum Aendern von Konnektoren (Connectors)
65 |*
66 \************************************************************************/
67 
68 SvxConnectionDialog::SvxConnectionDialog( Window* pParent, const SfxItemSet& rInAttrs,
69                                 const SdrView* pSdrView ) :
70         SfxSingleTabDialog( pParent, rInAttrs, RID_SVXPAGE_CONNECTION )
71 {
72     SvxConnectionPage* _pPage = new SvxConnectionPage( this, rInAttrs );
73 
74     _pPage->SetView( pSdrView );
75     _pPage->Construct();
76 
77     SetTabPage( _pPage );
78     SetText( _pPage->GetText() );
79 }
80 
81 /*************************************************************************
82 |*
83 |* Dtor
84 |*
85 \************************************************************************/
86 
87 SvxConnectionDialog::~SvxConnectionDialog()
88 {
89 }
90 
91 /*************************************************************************
92 |*
93 |* Seite zum Aendern von Konnektoren (Connectors)
94 |*
95 \************************************************************************/
96 
97 SvxConnectionPage::SvxConnectionPage( Window* pWindow, const SfxItemSet& rInAttrs ) :
98                 SfxTabPage      ( pWindow, CUI_RES( RID_SVXPAGE_CONNECTION ),
99                                   rInAttrs ),
100 
101         aFtType                 ( this, CUI_RES( FT_TYPE ) ),
102         aLbType                 ( this, CUI_RES( LB_TYPE ) ),
103 
104         aFlDelta                ( this, CUI_RES( FL_DELTA ) ),
105         aFtLine1                ( this, CUI_RES( FT_LINE_1 ) ),
106         aMtrFldLine1            ( this, CUI_RES( MTR_FLD_LINE_1 ) ),
107         aFtLine2                ( this, CUI_RES( FT_LINE_2 ) ),
108         aMtrFldLine2            ( this, CUI_RES( MTR_FLD_LINE_2 ) ),
109         aFtLine3                ( this, CUI_RES( FT_LINE_3 ) ),
110         aMtrFldLine3            ( this, CUI_RES( MTR_FLD_LINE_3 ) ),
111 
112         aFlDistance             ( this, CUI_RES( FL_DISTANCE ) ),
113         aFtHorz1                ( this, CUI_RES( FT_HORZ_1 ) ),
114         aMtrFldHorz1            ( this, CUI_RES( MTR_FLD_HORZ_1 ) ),
115         aFtVert1                ( this, CUI_RES( FT_VERT_1 ) ),
116         aMtrFldVert1            ( this, CUI_RES( MTR_FLD_VERT_1 ) ),
117         aFtHorz2                ( this, CUI_RES( FT_HORZ_2 ) ),
118         aMtrFldHorz2            ( this, CUI_RES( MTR_FLD_HORZ_2 ) ),
119         aFtVert2                ( this, CUI_RES( FT_VERT_2 ) ),
120         aMtrFldVert2            ( this, CUI_RES( MTR_FLD_VERT_2 ) ),
121 
122         aCtlPreview             ( this, CUI_RES( CTL_PREVIEW ), rInAttrs ),
123         rOutAttrs               ( rInAttrs ),
124         aAttrSet                ( *rInAttrs.GetPool() )
125 {
126     FreeResource();
127 
128     aCtlPreview.SetAccessibleName(String(CUI_RES(STR_EXAMPLE)));
129 
130     SfxItemPool* pPool = rOutAttrs.GetPool();
131     DBG_ASSERT( pPool, "Wo ist der Pool" );
132     eUnit = pPool->GetMetric( SDRATTR_EDGENODE1HORZDIST );
133 
134     FillTypeLB();
135 
136     const FieldUnit eFUnit = GetModuleFieldUnit( rInAttrs );
137     SetFieldUnit( aMtrFldHorz1, eFUnit );
138     SetFieldUnit( aMtrFldHorz2, eFUnit );
139     SetFieldUnit( aMtrFldVert1, eFUnit );
140     SetFieldUnit( aMtrFldVert2, eFUnit );
141     SetFieldUnit( aMtrFldLine1, eFUnit );
142     SetFieldUnit( aMtrFldLine2, eFUnit );
143     SetFieldUnit( aMtrFldLine3, eFUnit );
144     if( eFUnit == FUNIT_MM )
145     {
146         aMtrFldHorz1.SetSpinSize( 50 );
147         aMtrFldHorz2.SetSpinSize( 50 );
148         aMtrFldVert1.SetSpinSize( 50 );
149         aMtrFldVert2.SetSpinSize( 50 );
150         aMtrFldLine1.SetSpinSize( 50 );
151         aMtrFldLine2.SetSpinSize( 50 );
152         aMtrFldLine3.SetSpinSize( 50 );
153     }
154 
155     // disable 3D border
156     aCtlPreview.SetBorderStyle(WINDOW_BORDER_MONO);
157 
158     Link aLink( LINK( this, SvxConnectionPage, ChangeAttrHdl_Impl ) );
159     aMtrFldHorz1.SetModifyHdl( aLink );
160     aMtrFldVert1.SetModifyHdl( aLink );
161     aMtrFldHorz2.SetModifyHdl( aLink );
162     aMtrFldVert2.SetModifyHdl( aLink );
163     aMtrFldLine1.SetModifyHdl( aLink );
164     aMtrFldLine2.SetModifyHdl( aLink );
165     aMtrFldLine3.SetModifyHdl( aLink );
166     aLbType.SetSelectHdl( aLink );
167 }
168 
169 /*************************************************************************
170 |*
171 |* Dtor
172 |*
173 \************************************************************************/
174 
175 SvxConnectionPage::~SvxConnectionPage()
176 {
177 }
178 
179 /*************************************************************************
180 |*
181 |* Liest uebergebenen Item-Set
182 |*
183 \************************************************************************/
184 
185 void __EXPORT SvxConnectionPage::Reset( const SfxItemSet& rAttrs )
186 {
187     const SfxPoolItem* pItem = GetItem( rAttrs, SDRATTR_EDGENODE1HORZDIST );
188     const SfxItemPool* pPool = rAttrs.GetPool();
189 
190     // SdrEdgeNode1HorzDistItem
191     if( !pItem )
192         pItem = &pPool->GetDefaultItem( SDRATTR_EDGENODE1HORZDIST );
193     if( pItem )
194     {
195         long nValue = ( ( const SdrEdgeNode1HorzDistItem* )pItem )->GetValue();
196         SetMetricValue( aMtrFldHorz1, nValue, eUnit );
197     }
198     else
199         aMtrFldHorz1.SetEmptyFieldValue();
200 
201     aMtrFldHorz1.SaveValue();
202 
203     // SdrEdgeNode2HorzDistItem
204     pItem = GetItem( rAttrs, SDRATTR_EDGENODE2HORZDIST );
205     if( !pItem )
206         pItem = &pPool->GetDefaultItem( SDRATTR_EDGENODE2HORZDIST );
207     if( pItem )
208     {
209         long nValue = ( ( const SdrEdgeNode2HorzDistItem* )pItem )->GetValue();
210         SetMetricValue( aMtrFldHorz2, nValue, eUnit );
211     }
212     else
213         aMtrFldHorz2.SetEmptyFieldValue();
214 
215     aMtrFldHorz2.SaveValue();
216 
217     // SdrEdgeNode1VertDistItem
218     pItem = GetItem( rAttrs, SDRATTR_EDGENODE1VERTDIST );
219     if( !pItem )
220         pItem = &pPool->GetDefaultItem( SDRATTR_EDGENODE1VERTDIST );
221     if( pItem )
222     {
223         long nValue = ( ( const SdrEdgeNode1VertDistItem* )pItem )->GetValue();
224         SetMetricValue( aMtrFldVert1, nValue, eUnit );
225     }
226     else
227         aMtrFldVert1.SetEmptyFieldValue();
228 
229     aMtrFldVert1.SaveValue();
230 
231     // SdrEdgeNode2VertDistItem
232     pItem = GetItem( rAttrs, SDRATTR_EDGENODE2VERTDIST );
233     if( !pItem )
234         pItem = &pPool->GetDefaultItem( SDRATTR_EDGENODE2VERTDIST );
235     if( pItem )
236     {
237         long nValue = ( ( const SdrEdgeNode2VertDistItem* )pItem )->GetValue();
238         SetMetricValue( aMtrFldVert2, nValue, eUnit );
239     }
240     else
241         aMtrFldVert2.SetEmptyFieldValue();
242 
243     aMtrFldVert2.SaveValue();
244 
245     // SdrEdgeLine1DeltaItem
246     pItem = GetItem( rAttrs, SDRATTR_EDGELINE1DELTA );
247     if( !pItem )
248         pItem = &pPool->GetDefaultItem( SDRATTR_EDGELINE1DELTA );
249     if( pItem )
250     {
251         long nValue = ( ( const SdrEdgeLine1DeltaItem* )pItem )->GetValue();
252         SetMetricValue( aMtrFldLine1, nValue, eUnit );
253     }
254     else
255         aMtrFldLine1.SetEmptyFieldValue();
256 
257     aMtrFldLine1.SaveValue();
258 
259     // SdrEdgeLine2DeltaItem
260     pItem = GetItem( rAttrs, SDRATTR_EDGELINE2DELTA );
261     if( !pItem )
262         pItem = &pPool->GetDefaultItem( SDRATTR_EDGELINE2DELTA );
263     if( pItem )
264     {
265         long nValue = ( ( const SdrEdgeLine2DeltaItem* )pItem )->GetValue();
266         SetMetricValue( aMtrFldLine2, nValue, eUnit );
267     }
268     else
269         aMtrFldLine2.SetEmptyFieldValue();
270 
271     aMtrFldLine2.SaveValue();
272 
273     // SdrEdgeLine3DeltaItem
274     pItem = GetItem( rAttrs, SDRATTR_EDGELINE3DELTA );
275     if( !pItem )
276         pItem = &pPool->GetDefaultItem( SDRATTR_EDGELINE3DELTA );
277     if( pItem )
278     {
279         long nValue = ( ( const SdrEdgeLine3DeltaItem* )pItem )->GetValue();
280         SetMetricValue( aMtrFldLine3, nValue, eUnit );
281     }
282     else
283         aMtrFldLine3.SetEmptyFieldValue();
284 
285     aMtrFldLine3.SaveValue();
286 
287     // SdrEdgeLineDeltaAnzItem
288     pItem = GetItem( rAttrs, SDRATTR_EDGELINEDELTAANZ );
289     if( !pItem )
290         pItem = &pPool->GetDefaultItem( SDRATTR_EDGELINEDELTAANZ );
291     if( pItem )
292     {
293         sal_uInt16 nValue = ( ( const SdrEdgeLineDeltaAnzItem* )pItem )->GetValue();
294         if( nValue <= 2 )
295         {
296             aFtLine3.Enable( sal_False );
297             aMtrFldLine3.Enable( sal_False );
298             aMtrFldLine3.SetEmptyFieldValue();
299         }
300         if( nValue <= 1 )
301         {
302             aFtLine2.Enable( sal_False );
303             aMtrFldLine2.Enable( sal_False );
304             aMtrFldLine2.SetEmptyFieldValue();
305         }
306         if( nValue == 0 )
307         {
308             aFtLine1.Enable( sal_False );
309             aMtrFldLine1.Enable( sal_False );
310             aMtrFldLine1.SetEmptyFieldValue();
311         }
312     }
313 
314     // SdrEdgeKindItem
315     pItem = GetItem( rAttrs, SDRATTR_EDGEKIND );
316     if( !pItem )
317         pItem = &pPool->GetDefaultItem( SDRATTR_EDGEKIND );
318     if( pItem )
319     {
320         SdrEdgeKind nValue = ( ( const SdrEdgeKindItem* )pItem )->GetValue();
321         aLbType.SelectEntryPos( sal::static_int_cast< sal_uInt16 >(nValue) );
322     }
323     else
324         aLbType.SetNoSelection();
325     aLbType.SaveValue();
326 }
327 
328 /*************************************************************************
329 |*
330 |* Fuellt uebergebenen Item-Set mit Dialogbox-Attributen
331 |*
332 \************************************************************************/
333 
334 sal_Bool SvxConnectionPage::FillItemSet( SfxItemSet& rAttrs)
335 {
336     sal_Bool     bModified = sal_False;
337     sal_Int32    nValue;
338 
339     if( aMtrFldHorz1.GetText() != aMtrFldHorz1.GetSavedValue() )
340     {
341         nValue = GetCoreValue( aMtrFldHorz1, eUnit );
342         rAttrs.Put( SdrEdgeNode1HorzDistItem( nValue ) );
343         bModified = sal_True;
344     }
345 
346     if( aMtrFldHorz2.GetText() != aMtrFldHorz2.GetSavedValue() )
347     {
348         nValue = GetCoreValue( aMtrFldHorz2, eUnit );
349         rAttrs.Put( SdrEdgeNode2HorzDistItem( nValue ) );
350         bModified = sal_True;
351     }
352 
353     if( aMtrFldVert1.GetText() != aMtrFldVert1.GetSavedValue() )
354     {
355         nValue = GetCoreValue( aMtrFldVert1, eUnit );
356         rAttrs.Put( SdrEdgeNode1VertDistItem( nValue ) );
357         bModified = sal_True;
358     }
359 
360     if( aMtrFldVert2.GetText() != aMtrFldVert2.GetSavedValue() )
361     {
362         nValue = GetCoreValue( aMtrFldVert2, eUnit );
363         rAttrs.Put( SdrEdgeNode2VertDistItem( nValue ) );
364         bModified = sal_True;
365     }
366 
367     if( aMtrFldLine1.GetText() != aMtrFldLine1.GetSavedValue() )
368     {
369         nValue = GetCoreValue( aMtrFldLine1, eUnit );
370         rAttrs.Put( SdrEdgeLine1DeltaItem( nValue ) );
371         bModified = sal_True;
372     }
373 
374     if( aMtrFldLine2.GetText() != aMtrFldLine2.GetSavedValue() )
375     {
376         nValue = GetCoreValue( aMtrFldLine2, eUnit );
377         rAttrs.Put( SdrEdgeLine2DeltaItem( nValue ) );
378         bModified = sal_True;
379     }
380 
381     if( aMtrFldLine3.GetText() != aMtrFldLine3.GetSavedValue() )
382     {
383         nValue = GetCoreValue( aMtrFldLine3, eUnit );
384         rAttrs.Put( SdrEdgeLine3DeltaItem( nValue ) );
385         bModified = sal_True;
386     }
387 
388 
389     sal_uInt16 nPos = aLbType.GetSelectEntryPos();
390     if( nPos != aLbType.GetSavedValue() )
391     {
392         if( nPos != LISTBOX_ENTRY_NOTFOUND )
393         {
394             rAttrs.Put( SdrEdgeKindItem( (SdrEdgeKind) nPos ) );
395             bModified = sal_True;
396         }
397     }
398 
399     return( bModified );
400 }
401 
402 /*************************************************************************
403 |*
404 |*
405 |*
406 \************************************************************************/
407 
408 void SvxConnectionPage::Construct()
409 {
410     DBG_ASSERT( pView, "Keine gueltige View Uebergeben!" );
411 
412     aCtlPreview.SetView( pView );
413     aCtlPreview.Construct();
414 }
415 
416 /*************************************************************************
417 |*
418 |* Erzeugt die Seite
419 |*
420 \************************************************************************/
421 
422 SfxTabPage* SvxConnectionPage::Create( Window* pWindow,
423                 const SfxItemSet& rAttrs )
424 {
425     return( new SvxConnectionPage( pWindow, rAttrs ) );
426 }
427 
428 /*************************************************************************
429 |*
430 |*
431 |*
432 \************************************************************************/
433 
434 sal_uInt16* SvxConnectionPage::GetRanges()
435 {
436     return( pRanges );
437 }
438 
439 /*************************************************************************
440 |*
441 |*
442 |*
443 \************************************************************************/
444 
445 IMPL_LINK( SvxConnectionPage, ChangeAttrHdl_Impl, void *, p )
446 {
447     if( p == &aMtrFldHorz1 )
448     {
449         sal_Int32 nValue = GetCoreValue( aMtrFldHorz1, eUnit );
450         aAttrSet.Put( SdrEdgeNode1HorzDistItem( nValue ) );
451     }
452 
453     if( p == &aMtrFldHorz2 )
454     {
455         sal_Int32 nValue = GetCoreValue( aMtrFldHorz2, eUnit );
456         aAttrSet.Put( SdrEdgeNode2HorzDistItem( nValue ) );
457     }
458 
459     if( p == &aMtrFldVert1 )
460     {
461         sal_Int32 nValue = GetCoreValue( aMtrFldVert1, eUnit );
462         aAttrSet.Put( SdrEdgeNode1VertDistItem( nValue ) );
463     }
464 
465     if( p == &aMtrFldVert2 )
466     {
467         sal_Int32 nValue = GetCoreValue( aMtrFldVert2, eUnit );
468         aAttrSet.Put( SdrEdgeNode2VertDistItem( nValue ) );
469     }
470 
471     if( p == &aMtrFldLine1 )
472     {
473         sal_Int32 nValue = GetCoreValue( aMtrFldLine1, eUnit );
474         aAttrSet.Put( SdrEdgeLine1DeltaItem( nValue ) );
475     }
476 
477     if( p == &aMtrFldLine2 )
478     {
479         sal_Int32 nValue = GetCoreValue( aMtrFldLine2, eUnit );
480         aAttrSet.Put( SdrEdgeLine2DeltaItem( nValue ) );
481     }
482 
483     if( p == &aMtrFldLine3 )
484     {
485         sal_Int32 nValue = GetCoreValue( aMtrFldLine3, eUnit );
486         aAttrSet.Put( SdrEdgeLine3DeltaItem( nValue ) );
487     }
488 
489 
490     if( p == &aLbType )
491     {
492         sal_uInt16 nPos = aLbType.GetSelectEntryPos();
493         if( nPos != LISTBOX_ENTRY_NOTFOUND )
494         {
495             aAttrSet.Put( SdrEdgeKindItem( (SdrEdgeKind) nPos ) );
496         }
497     }
498 
499     aCtlPreview.SetAttributes( aAttrSet );
500 
501     if( p == &aLbType )
502     {
503         // Anzahl der Linienversaetze ermitteln
504         sal_uInt16 nCount = aCtlPreview.GetLineDeltaAnz();
505 
506         aFtLine3.Enable( nCount > 2 );
507         aMtrFldLine3.Enable( nCount > 2 );
508         if( nCount > 2 )
509             aMtrFldLine3.SetValue( aMtrFldLine3.GetValue() );
510         else
511             aMtrFldLine3.SetEmptyFieldValue();
512 
513         aFtLine2.Enable( nCount > 1 );
514         aMtrFldLine2.Enable( nCount > 1 );
515         if( nCount > 1 )
516             aMtrFldLine2.SetValue( aMtrFldLine2.GetValue() );
517         else
518             aMtrFldLine2.SetEmptyFieldValue();
519 
520         aFtLine1.Enable( nCount > 0 );
521         aMtrFldLine1.Enable( nCount > 0 );
522         if( nCount > 0 )
523             aMtrFldLine1.SetValue( aMtrFldLine1.GetValue() );
524         else
525             aMtrFldLine1.SetEmptyFieldValue();
526 
527     }
528 
529     return( 0L );
530 }
531 
532 /*************************************************************************
533 |*
534 |*
535 |*
536 \************************************************************************/
537 
538 void SvxConnectionPage::FillTypeLB()
539 {
540     // ListBox mit Verbindernamen fuellen
541     const SfxPoolItem* pItem = GetItem( rOutAttrs, SDRATTR_EDGEKIND );
542     const SfxItemPool* pPool = rOutAttrs.GetPool();
543 
544     if( !pItem )
545         pItem = &pPool->GetDefaultItem( SDRATTR_EDGEKIND );
546     if( pItem )
547     {
548         const SdrEdgeKindItem* pEdgeKindItem = (const SdrEdgeKindItem*) pItem;
549         sal_uInt16 nCount = pEdgeKindItem->GetValueCount();
550         String aStr;
551 
552         for( sal_uInt16 i = 0; i < nCount; i++ )
553         {
554             aStr = pEdgeKindItem->GetValueTextByPos( i );
555             aLbType.InsertEntry( aStr );
556         }
557     }
558 }
559 void SvxConnectionPage::PageCreated (SfxAllItemSet aSet) //add CHINA001
560 {
561     SFX_ITEMSET_ARG(&aSet,pOfaPtrItem,OfaPtrItem,SID_OBJECT_LIST,sal_False);
562     if (pOfaPtrItem)
563         SetView( static_cast<SdrView *>(pOfaPtrItem->GetValue()) );
564 
565     Construct();
566 }
567 
568