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 <tools/urlobj.hxx>
21 : #include <vcl/msgbox.hxx>
22 : #include <vcl/settings.hxx>
23 : #include <unotools/pathoptions.hxx>
24 : #include <sfx2/app.hxx>
25 : #include <sfx2/filedlghelper.hxx>
26 : #include "com/sun/star/ui/dialogs/TemplateDescription.hpp"
27 :
28 : #include <cuires.hrc>
29 : #include "helpid.hrc"
30 : #include <svx/dialmgr.hxx>
31 : #include <svx/svdobj.hxx>
32 : #include <svx/svdopath.hxx>
33 : #include "svx/drawitem.hxx"
34 : #include <svx/xpool.hxx>
35 : #include <svx/xtable.hxx>
36 : #include "cuitabline.hxx"
37 : #include <svx/svxdlg.hxx>
38 : #include <dialmgr.hxx>
39 : #include "svx/dlgutil.hxx"
40 : #include <basegfx/range/b2drange.hxx>
41 : #include <basegfx/polygon/b2dpolygontools.hxx>
42 : #include <basegfx/matrix/b2dhommatrix.hxx>
43 : #include <basegfx/polygon/b2dpolygon.hxx>
44 : #include <basegfx/polygon/b2dpolypolygontools.hxx>
45 : #include <basegfx/matrix/b2dhommatrixtools.hxx>
46 : #include <svx/dialogs.hrc>
47 : #include <boost/scoped_ptr.hpp>
48 :
49 : #define XOUT_WIDTH 150
50 :
51 0 : SvxLineEndDefTabPage::SvxLineEndDefTabPage
52 : (
53 : vcl::Window* pParent,
54 : const SfxItemSet& rInAttrs
55 : ) :
56 :
57 : SfxTabPage( pParent
58 : , "LineEndPage"
59 : , "cui/ui/lineendstabpage.ui"
60 : , &rInAttrs ),
61 : rOutAttrs ( rInAttrs ),
62 : pPolyObj ( NULL ),
63 : bObjSelected ( false ),
64 :
65 0 : pXPool ( static_cast<XOutdevItemPool*>(rInAttrs.GetPool()) ),
66 : aXLStyle ( XLINE_SOLID ),
67 : aXWidth ( XOUT_WIDTH ),
68 : aXColor ( OUString(), COL_BLACK ),
69 : aXLineAttr ( pXPool ),
70 0 : rXLSet ( aXLineAttr.GetItemSet() ),
71 : pLineEndList ( NULL ),
72 : pnLineEndListState ( NULL ),
73 : pPageType ( NULL ),
74 : nDlgType ( 0 ),
75 0 : pPosLineEndLb ( NULL )
76 : {
77 0 : get(m_pEdtName,"EDT_NAME");
78 0 : get(m_pLbLineEnds,"LB_LINEENDS");
79 0 : get(m_pBtnAdd,"BTN_ADD");
80 0 : get(m_pBtnModify,"BTN_MODIFY");
81 0 : get(m_pBtnDelete,"BTN_DELETE");
82 0 : get(m_pBtnLoad,"BTN_LOAD");
83 0 : get(m_pBtnSave,"BTN_SAVE");
84 0 : get(m_pCtlPreview,"CTL_PREVIEW");
85 :
86 : // this page needs ExchangeSupport
87 0 : SetExchangeSupport();
88 :
89 0 : rXLSet.Put( aXLStyle );
90 0 : rXLSet.Put( aXWidth );
91 0 : rXLSet.Put( aXColor );
92 0 : rXLSet.Put( XLineStartWidthItem( m_pCtlPreview->GetOutputSize().Height() / 2 ) );
93 0 : rXLSet.Put( XLineEndWidthItem( m_pCtlPreview->GetOutputSize().Height() / 2 ) );
94 :
95 : // #i34740#
96 0 : m_pCtlPreview->SetLineAttributes(aXLineAttr.GetItemSet());
97 :
98 0 : m_pBtnAdd->SetClickHdl( LINK( this, SvxLineEndDefTabPage, ClickAddHdl_Impl ) );
99 0 : m_pBtnModify->SetClickHdl( LINK( this, SvxLineEndDefTabPage, ClickModifyHdl_Impl ) );
100 0 : m_pBtnDelete->SetClickHdl( LINK( this, SvxLineEndDefTabPage, ClickDeleteHdl_Impl ) );
101 0 : m_pBtnLoad->SetClickHdl( LINK( this, SvxLineEndDefTabPage, ClickLoadHdl_Impl ) );
102 0 : m_pBtnSave->SetClickHdl( LINK( this, SvxLineEndDefTabPage, ClickSaveHdl_Impl ) );
103 :
104 0 : m_pLbLineEnds->SetSelectHdl( LINK( this, SvxLineEndDefTabPage, SelectLineEndHdl_Impl ) );
105 :
106 0 : }
107 :
108 0 : void SvxLineEndDefTabPage::Resize()
109 : {
110 0 : rXLSet.Put(XLineStartWidthItem(m_pCtlPreview->GetOutputSize().Height() / 2 ));
111 0 : rXLSet.Put(XLineEndWidthItem(m_pCtlPreview->GetOutputSize().Height() / 2 ));
112 0 : SfxTabPage::Resize();
113 0 : }
114 :
115 :
116 :
117 0 : SvxLineEndDefTabPage::~SvxLineEndDefTabPage()
118 : {
119 0 : }
120 :
121 :
122 :
123 0 : void SvxLineEndDefTabPage::Construct()
124 : {
125 0 : m_pLbLineEnds->Fill( pLineEndList );
126 :
127 0 : bool bCreateArrowPossible = true;
128 :
129 0 : if( !pPolyObj )
130 : {
131 0 : bCreateArrowPossible = false;
132 : }
133 0 : else if( !pPolyObj->ISA( SdrPathObj ) )
134 : {
135 0 : SdrObjTransformInfoRec aInfoRec;
136 0 : pPolyObj->TakeObjInfo( aInfoRec );
137 0 : SdrObject* pNewObj = 0;
138 0 : if( aInfoRec.bCanConvToPath )
139 0 : pNewObj = pPolyObj->ConvertToPolyObj( true, false );
140 :
141 0 : bCreateArrowPossible = pNewObj && pNewObj->ISA( SdrPathObj );
142 0 : SdrObject::Free( pNewObj );
143 : }
144 :
145 0 : if( !bCreateArrowPossible )
146 0 : m_pBtnAdd->Disable();
147 0 : }
148 :
149 :
150 :
151 0 : void SvxLineEndDefTabPage::ActivatePage( const SfxItemSet& )
152 : {
153 0 : if( nDlgType == 0 ) // area dialog
154 : {
155 : // ActivatePage() is called before the dialog receives PageCreated() !!!
156 0 : if( pLineEndList.is() )
157 : {
158 0 : if( *pPosLineEndLb != LISTBOX_ENTRY_NOTFOUND )
159 : {
160 0 : m_pLbLineEnds->SelectEntryPos( *pPosLineEndLb );
161 0 : SelectLineEndHdl_Impl( this );
162 : }
163 0 : INetURLObject aURL( pLineEndList->GetPath() );
164 :
165 0 : aURL.Append( pLineEndList->GetName() );
166 : DBG_ASSERT( aURL.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" );
167 0 : *pPageType = 0; // 3
168 0 : *pPosLineEndLb = LISTBOX_ENTRY_NOTFOUND;
169 : }
170 : }
171 0 : }
172 :
173 :
174 :
175 0 : int SvxLineEndDefTabPage::DeactivatePage( SfxItemSet* _pSet )
176 : {
177 0 : CheckChanges_Impl();
178 :
179 0 : if( _pSet )
180 0 : FillItemSet( _pSet );
181 :
182 0 : return( LEAVE_PAGE );
183 : }
184 :
185 :
186 :
187 0 : void SvxLineEndDefTabPage::CheckChanges_Impl()
188 : {
189 0 : sal_Int32 nPos = m_pLbLineEnds->GetSelectEntryPos();
190 :
191 0 : if ( nPos != LISTBOX_ENTRY_NOTFOUND )
192 : {
193 0 : OUString aString = m_pEdtName->GetText();
194 :
195 0 : if( aString != m_pLbLineEnds->GetSelectEntry() )
196 : {
197 0 : MessageDialog aQueryBox( GetParentDialog()
198 : ,"AskChangeLineEndDialog"
199 0 : ,"cui/ui/querychangelineenddialog.ui");
200 :
201 0 : if ( aQueryBox.Execute() == RET_YES )
202 0 : ClickModifyHdl_Impl( this );
203 0 : }
204 : }
205 0 : nPos = m_pLbLineEnds->GetSelectEntryPos();
206 :
207 0 : if ( nPos != LISTBOX_ENTRY_NOTFOUND )
208 0 : *pPosLineEndLb = nPos;
209 0 : }
210 :
211 :
212 :
213 0 : bool SvxLineEndDefTabPage::FillItemSet( SfxItemSet* rSet )
214 : {
215 0 : if( nDlgType == 0 ) // line dialog
216 : {
217 0 : if( *pPageType == 3 )
218 : {
219 0 : CheckChanges_Impl();
220 :
221 0 : long nPos = m_pLbLineEnds->GetSelectEntryPos();
222 0 : XLineEndEntry* pEntry = pLineEndList->GetLineEnd( nPos );
223 :
224 0 : rSet->Put( XLineStartItem( pEntry->GetName(), pEntry->GetLineEnd() ) );
225 0 : rSet->Put( XLineEndItem( pEntry->GetName(), pEntry->GetLineEnd() ) );
226 : }
227 : }
228 0 : return true;
229 : }
230 :
231 :
232 :
233 0 : void SvxLineEndDefTabPage::Reset( const SfxItemSet* )
234 : {
235 0 : m_pLbLineEnds->SelectEntryPos( 0 );
236 :
237 : // Update lineend
238 0 : if( pLineEndList->Count() > 0 )
239 : {
240 0 : int nPos = m_pLbLineEnds->GetSelectEntryPos();
241 :
242 0 : XLineEndEntry* pEntry = pLineEndList->GetLineEnd( nPos );
243 :
244 0 : m_pEdtName->SetText( m_pLbLineEnds->GetSelectEntry() );
245 :
246 0 : rXLSet.Put( XLineStartItem( OUString(), pEntry->GetLineEnd() ) );
247 0 : rXLSet.Put( XLineEndItem( OUString(), pEntry->GetLineEnd() ) );
248 :
249 : // #i34740#
250 0 : m_pCtlPreview->SetLineAttributes(aXLineAttr.GetItemSet());
251 :
252 0 : m_pCtlPreview->Invalidate();
253 : }
254 :
255 : // determine button state
256 0 : if( pLineEndList->Count() )
257 : {
258 0 : m_pBtnModify->Enable();
259 0 : m_pBtnDelete->Enable();
260 0 : m_pBtnSave->Enable();
261 : }
262 : else
263 : {
264 0 : m_pBtnModify->Disable();
265 0 : m_pBtnDelete->Disable();
266 0 : m_pBtnSave->Disable();
267 : }
268 0 : }
269 :
270 :
271 :
272 0 : SfxTabPage* SvxLineEndDefTabPage::Create( vcl::Window* pWindow, const SfxItemSet* rSet )
273 : {
274 0 : return( new SvxLineEndDefTabPage( pWindow, *rSet ) );
275 : }
276 :
277 :
278 :
279 0 : IMPL_LINK_NOARG(SvxLineEndDefTabPage, SelectLineEndHdl_Impl)
280 : {
281 0 : if( pLineEndList->Count() > 0 )
282 : {
283 0 : int nPos = m_pLbLineEnds->GetSelectEntryPos();
284 :
285 0 : XLineEndEntry* pEntry = pLineEndList->GetLineEnd( nPos );
286 :
287 0 : m_pEdtName->SetText( m_pLbLineEnds->GetSelectEntry() );
288 :
289 0 : rXLSet.Put( XLineStartItem( OUString(), pEntry->GetLineEnd() ) );
290 0 : rXLSet.Put( XLineEndItem( OUString(), pEntry->GetLineEnd() ) );
291 :
292 : // #i34740#
293 0 : m_pCtlPreview->SetLineAttributes(aXLineAttr.GetItemSet());
294 :
295 0 : m_pCtlPreview->Invalidate();
296 :
297 : // Is not set before, in order to only take the new style,
298 : // if there is an entry selected in the ListBox
299 0 : *pPageType = 3;
300 : }
301 0 : return( 0L );
302 : }
303 :
304 :
305 :
306 0 : long SvxLineEndDefTabPage::ChangePreviewHdl_Impl( void* )
307 : {
308 0 : m_pCtlPreview->Invalidate();
309 0 : return( 0L );
310 : }
311 :
312 :
313 :
314 0 : IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickModifyHdl_Impl)
315 : {
316 0 : sal_Int32 nPos = m_pLbLineEnds->GetSelectEntryPos();
317 :
318 0 : if( nPos != LISTBOX_ENTRY_NOTFOUND )
319 : {
320 0 : ResMgr& rMgr = CUI_MGR();
321 0 : OUString aDesc( ResId( RID_SVXSTR_DESC_LINEEND, rMgr ) );
322 0 : OUString aName( m_pEdtName->GetText() );
323 0 : long nCount = pLineEndList->Count();
324 0 : bool bDifferent = true;
325 :
326 : // check whether the name is existing already
327 0 : for ( long i = 0; i < nCount && bDifferent; i++ )
328 0 : if ( aName == pLineEndList->GetLineEnd( i )->GetName() )
329 0 : bDifferent = false;
330 :
331 : // if yes, repeat and demand a new name
332 0 : if ( !bDifferent )
333 : {
334 0 : MessageDialog aWarningBox( GetParentDialog()
335 : ,"DuplicateNameDialog"
336 0 : ,"cui/ui/queryduplicatedialog.ui");
337 0 : aWarningBox.Execute();
338 :
339 0 : SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
340 : DBG_ASSERT(pFact, "Dialog creation failed!");
341 0 : boost::scoped_ptr<AbstractSvxNameDialog> pDlg(pFact->CreateSvxNameDialog( GetParentDialog(), aName, aDesc ));
342 : DBG_ASSERT(pDlg, "Dialog creation failed!");
343 0 : bool bLoop = true;
344 :
345 0 : while( !bDifferent && bLoop && pDlg->Execute() == RET_OK )
346 : {
347 0 : pDlg->GetName( aName );
348 0 : bDifferent = true;
349 :
350 0 : for( long i = 0; i < nCount && bDifferent; i++ )
351 : {
352 0 : if( aName == pLineEndList->GetLineEnd( i )->GetName() )
353 0 : bDifferent = false;
354 : }
355 :
356 0 : if( bDifferent )
357 0 : bLoop = false;
358 : else
359 0 : aWarningBox.Execute();
360 0 : }
361 : }
362 :
363 : // if not existing, enter the entry
364 0 : if( bDifferent )
365 : {
366 0 : const XLineEndEntry* pOldEntry = pLineEndList->GetLineEnd( nPos );
367 :
368 0 : if(pOldEntry)
369 : {
370 : // #123497# Need to replace the existing entry with a new one (old returned needs to be deleted)
371 0 : XLineEndEntry* pEntry = new XLineEndEntry(pOldEntry->GetLineEnd(), aName);
372 0 : delete pLineEndList->Replace(pEntry, nPos);
373 :
374 0 : m_pEdtName->SetText( aName );
375 :
376 0 : m_pLbLineEnds->Modify( *pEntry, nPos, pLineEndList->GetUiBitmap( nPos ) );
377 0 : m_pLbLineEnds->SelectEntryPos( nPos );
378 :
379 : // Flag fuer modifiziert setzen
380 0 : *pnLineEndListState |= CT_MODIFIED;
381 :
382 0 : *pPageType = 3;
383 : }
384 : else
385 : {
386 : OSL_ENSURE(false, "LineEnd to be modified not existing (!)");
387 : }
388 0 : }
389 : }
390 0 : return( 0L );
391 : }
392 :
393 :
394 :
395 0 : IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickAddHdl_Impl)
396 : {
397 0 : if( pPolyObj )
398 : {
399 : const SdrObject* pNewObj;
400 0 : SdrObject* pConvPolyObj = NULL;
401 :
402 0 : if( pPolyObj->ISA( SdrPathObj ) )
403 : {
404 0 : pNewObj = pPolyObj;
405 : }
406 : else
407 : {
408 0 : SdrObjTransformInfoRec aInfoRec;
409 0 : pPolyObj->TakeObjInfo( aInfoRec );
410 :
411 0 : if( aInfoRec.bCanConvToPath )
412 : {
413 0 : pNewObj = pConvPolyObj = pPolyObj->ConvertToPolyObj( true, false );
414 :
415 0 : if( !pNewObj || !pNewObj->ISA( SdrPathObj ) )
416 0 : return( 0L ); // cancel, additional safety, which
417 : // has no use for group objects though.
418 : }
419 0 : else return( 0L ); // cancel
420 : }
421 :
422 0 : basegfx::B2DPolyPolygon aNewPolyPolygon(static_cast<const SdrPathObj*>(pNewObj)->GetPathPoly());
423 0 : basegfx::B2DRange aNewRange(basegfx::tools::getRange(aNewPolyPolygon));
424 :
425 : // normalize
426 0 : aNewPolyPolygon.transform(basegfx::tools::createTranslateB2DHomMatrix( -aNewRange.getMinX(), -aNewRange.getMinY()));
427 :
428 0 : SdrObject::Free( pConvPolyObj );
429 :
430 : XLineEndEntry* pEntry;
431 :
432 0 : ResMgr& rMgr = CUI_MGR();
433 0 : OUString aNewName( SVX_RES( RID_SVXSTR_LINEEND ) );
434 0 : OUString aDesc( ResId( RID_SVXSTR_DESC_LINEEND, rMgr ) );
435 0 : OUString aName;
436 :
437 0 : long nCount = pLineEndList->Count();
438 0 : long j = 1;
439 0 : bool bDifferent = false;
440 :
441 0 : while ( !bDifferent )
442 : {
443 0 : aName = aNewName;
444 0 : aName += " ";
445 0 : aName += OUString::number( j++ );
446 0 : bDifferent = true;
447 :
448 0 : for( long i = 0; i < nCount && bDifferent; i++ )
449 0 : if ( aName == pLineEndList->GetLineEnd( i )->GetName() )
450 0 : bDifferent = false;
451 : }
452 :
453 0 : SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
454 : DBG_ASSERT(pFact, "Dialog creation failed!");
455 0 : boost::scoped_ptr<AbstractSvxNameDialog> pDlg(pFact->CreateSvxNameDialog( GetParentDialog(), aName, aDesc ));
456 : DBG_ASSERT(pDlg, "Dialog creation failed!");
457 0 : bool bLoop = true;
458 :
459 0 : while ( bLoop && pDlg->Execute() == RET_OK )
460 : {
461 0 : pDlg->GetName( aName );
462 0 : bDifferent = true;
463 :
464 0 : for( long i = 0; i < nCount && bDifferent; i++ )
465 : {
466 0 : if( aName == pLineEndList->GetLineEnd( i )->GetName() )
467 0 : bDifferent = false;
468 : }
469 :
470 0 : if( bDifferent )
471 : {
472 0 : bLoop = false;
473 0 : pEntry = new XLineEndEntry( aNewPolyPolygon, aName );
474 :
475 0 : long nLineEndCount = pLineEndList->Count();
476 0 : pLineEndList->Insert( pEntry, nLineEndCount );
477 :
478 : // add to the ListBox
479 0 : m_pLbLineEnds->Append( *pEntry, pLineEndList->GetUiBitmap( nLineEndCount ) );
480 0 : m_pLbLineEnds->SelectEntryPos( m_pLbLineEnds->GetEntryCount() - 1 );
481 :
482 0 : *pnLineEndListState |= CT_MODIFIED;
483 :
484 0 : SelectLineEndHdl_Impl( this );
485 : }
486 : else
487 : {
488 0 : MessageDialog aBox( GetParentDialog()
489 : ,"DuplicateNameDialog"
490 0 : ,"cui/ui/queryduplicatedialog.ui");
491 0 : aBox.Execute();
492 : }
493 0 : }
494 : }
495 : else
496 0 : m_pBtnAdd->Disable();
497 :
498 : // determine button state
499 0 : if ( pLineEndList->Count() )
500 : {
501 0 : m_pBtnModify->Enable();
502 0 : m_pBtnDelete->Enable();
503 0 : m_pBtnSave->Enable();
504 : }
505 0 : return( 0L );
506 : }
507 :
508 :
509 :
510 0 : IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickDeleteHdl_Impl)
511 : {
512 0 : sal_Int32 nPos = m_pLbLineEnds->GetSelectEntryPos();
513 :
514 0 : if( nPos != LISTBOX_ENTRY_NOTFOUND )
515 : {
516 0 : MessageDialog aQueryBox( GetParentDialog()
517 : ,"AskDelLineEndDialog"
518 0 : ,"cui/ui/querydeletelineenddialog.ui");
519 :
520 0 : if ( aQueryBox.Execute() == RET_YES )
521 : {
522 0 : delete pLineEndList->Remove( nPos );
523 0 : m_pLbLineEnds->RemoveEntry( nPos );
524 0 : m_pLbLineEnds->SelectEntryPos( 0 );
525 :
526 0 : SelectLineEndHdl_Impl( this );
527 0 : *pPageType = 0; // LineEnd shall not be taken over
528 :
529 0 : *pnLineEndListState |= CT_MODIFIED;
530 :
531 0 : ChangePreviewHdl_Impl( this );
532 0 : }
533 : }
534 : // determine button state
535 0 : if( !pLineEndList->Count() )
536 : {
537 0 : m_pBtnModify->Disable();
538 0 : m_pBtnDelete->Disable();
539 0 : m_pBtnSave->Disable();
540 : }
541 0 : return( 0L );
542 : }
543 :
544 :
545 :
546 0 : IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickLoadHdl_Impl)
547 : {
548 0 : sal_uInt16 nReturn = RET_YES;
549 :
550 0 : if ( *pnLineEndListState & CT_MODIFIED )
551 : {
552 0 : nReturn = MessageDialog( GetParentDialog()
553 : ,"AskSaveList"
554 0 : ,"cui/ui/querysavelistdialog.ui").Execute();
555 :
556 0 : if ( nReturn == RET_YES )
557 0 : pLineEndList->Save();
558 : }
559 :
560 0 : if ( nReturn != RET_CANCEL )
561 : {
562 0 : ::sfx2::FileDialogHelper aDlg(com::sun::star::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE, 0 );
563 0 : OUString aStrFilterType( "*.soe" );
564 0 : aDlg.AddFilter( aStrFilterType, aStrFilterType );
565 0 : INetURLObject aFile( SvtPathOptions().GetPalettePath() );
566 0 : aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) );
567 :
568 0 : if( aDlg.Execute() == ERRCODE_NONE )
569 : {
570 0 : INetURLObject aURL( aDlg.GetPath() );
571 0 : INetURLObject aPathURL( aURL );
572 :
573 0 : aPathURL.removeSegment();
574 0 : aPathURL.removeFinalSlash();
575 :
576 : XLineEndListRef pLeList = XPropertyList::AsLineEndList(
577 : XPropertyList::CreatePropertyList(
578 : XLINE_END_LIST,
579 0 : aPathURL.GetMainURL(INetURLObject::NO_DECODE), ""));
580 0 : pLeList->SetName( aURL.getName() );
581 0 : if( pLeList->Load() )
582 : {
583 0 : pLineEndList = pLeList;
584 0 : static_cast<SvxLineTabDialog*>( GetParentDialog() )->SetNewLineEndList( pLineEndList );
585 0 : m_pLbLineEnds->Clear();
586 0 : m_pLbLineEnds->Fill( pLineEndList );
587 0 : Reset( &rOutAttrs );
588 :
589 0 : pLineEndList->SetName( aURL.getName() );
590 :
591 0 : *pnLineEndListState |= CT_CHANGED;
592 0 : *pnLineEndListState &= ~CT_MODIFIED;
593 : }
594 : else
595 0 : MessageDialog( GetParentDialog()
596 : ,"NoLoadedFileDialog"
597 0 : ,"cui/ui/querynoloadedfiledialog.ui").Execute();
598 0 : }
599 : }
600 :
601 : // determine button state
602 0 : if ( pLineEndList->Count() )
603 : {
604 0 : m_pBtnModify->Enable();
605 0 : m_pBtnDelete->Enable();
606 0 : m_pBtnSave->Enable();
607 : }
608 : else
609 : {
610 0 : m_pBtnModify->Disable();
611 0 : m_pBtnDelete->Disable();
612 0 : m_pBtnSave->Disable();
613 : }
614 0 : return( 0L );
615 : }
616 :
617 :
618 :
619 0 : IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickSaveHdl_Impl)
620 : {
621 0 : ::sfx2::FileDialogHelper aDlg( com::sun::star::ui::dialogs::TemplateDescription::FILESAVE_SIMPLE, 0 );
622 0 : OUString aStrFilterType( "*.soe" );
623 0 : aDlg.AddFilter( aStrFilterType, aStrFilterType );
624 :
625 0 : INetURLObject aFile( SvtPathOptions().GetPalettePath() );
626 : DBG_ASSERT( aFile.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" );
627 :
628 0 : if( !pLineEndList->GetName().isEmpty() )
629 : {
630 0 : aFile.Append( pLineEndList->GetName() );
631 :
632 0 : if( aFile.getExtension().isEmpty() )
633 0 : aFile.SetExtension( "soe" );
634 : }
635 :
636 0 : aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) );
637 0 : if ( aDlg.Execute() == ERRCODE_NONE )
638 : {
639 0 : INetURLObject aURL( aDlg.GetPath() );
640 0 : INetURLObject aPathURL( aURL );
641 :
642 0 : aPathURL.removeSegment();
643 0 : aPathURL.removeFinalSlash();
644 :
645 0 : pLineEndList->SetName( aURL.getName() );
646 0 : pLineEndList->SetPath( aPathURL.GetMainURL( INetURLObject::NO_DECODE ) );
647 :
648 0 : if( pLineEndList->Save() )
649 : {
650 0 : *pnLineEndListState |= CT_SAVED;
651 0 : *pnLineEndListState &= ~CT_MODIFIED;
652 : }
653 : else
654 : {
655 0 : MessageDialog( GetParentDialog()
656 : ,"NoSaveFileDialog"
657 0 : ,"cui/ui/querynosavefiledialog.ui").Execute();
658 0 : }
659 : }
660 0 : return( 0L );
661 : }
662 :
663 0 : void SvxLineEndDefTabPage::DataChanged( const DataChangedEvent& rDCEvt )
664 : {
665 0 : SfxTabPage::DataChanged( rDCEvt );
666 :
667 0 : if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) && (rDCEvt.GetFlags() & SETTINGS_STYLE) )
668 : {
669 0 : sal_Int32 nOldSelect = m_pLbLineEnds->GetSelectEntryPos();
670 0 : m_pLbLineEnds->Clear();
671 0 : m_pLbLineEnds->Fill( pLineEndList );
672 0 : m_pLbLineEnds->SelectEntryPos( nOldSelect );
673 : }
674 0 : }
675 :
676 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|