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 <unotools/pathoptions.hxx>
22 : #include <sfx2/app.hxx>
23 : #include <sfx2/module.hxx>
24 : #include <sfx2/objsh.hxx>
25 : #include <sfx2/viewsh.hxx>
26 : #include <sfx2/viewfrm.hxx>
27 : #include <sfx2/dispatch.hxx>
28 : #include <svtools/colrdlg.hxx>
29 : #include <vcl/msgbox.hxx>
30 : #include <sfx2/filedlghelper.hxx>
31 : #include <svx/ofaitem.hxx>
32 : #include "com/sun/star/ui/dialogs/TemplateDescription.hpp"
33 :
34 : #include <cuires.hrc>
35 : #include "helpid.hrc"
36 : #include "svx/xattr.hxx"
37 : #include <svx/xpool.hxx>
38 : #include <svx/xtable.hxx>
39 : #include "svx/drawitem.hxx"
40 : #include "cuitabarea.hxx"
41 : #include "defdlgname.hxx"
42 : #include "dlgname.hxx"
43 : #include <svx/svxdlg.hxx>
44 : #include <dialmgr.hxx>
45 : #include <cuitabline.hxx>
46 : #include <svx/dialmgr.hxx>
47 : #include <svx/dialogs.hrc>
48 : #include <boost/scoped_ptr.hpp>
49 :
50 : using namespace com::sun::star;
51 :
52 0 : XPropertyListRef SvxColorTabPage::GetList()
53 : {
54 0 : SvxAreaTabDialog* pArea = dynamic_cast< SvxAreaTabDialog* >( mpTopDlg );
55 0 : SvxLineTabDialog* pLine = dynamic_cast< SvxLineTabDialog* >( mpTopDlg );
56 :
57 0 : XColorListRef pList;
58 0 : if( pArea )
59 0 : pList = pArea->GetNewColorList();
60 0 : if( pLine )
61 0 : pList = pLine->GetNewColorList();
62 :
63 0 : if( !pList.is() ) {
64 0 : if( pArea )
65 0 : pList = pArea->GetColorList();
66 0 : if( pLine )
67 0 : pList = pLine->GetColorList();
68 : }
69 :
70 : // URGH - abstract this nicely ... for re-using SvxLoadSaveEmbed
71 0 : if( !pList.is() ) {
72 0 : SvxColorTabPage *pPage = dynamic_cast< SvxColorTabPage *>( this );
73 0 : if( pPage )
74 0 : pList = pPage->GetColorList();
75 : }
76 :
77 0 : return XPropertyListRef( static_cast< XPropertyList * >( pList.get() ) );
78 : }
79 :
80 0 : void SvxColorTabPage::SetEmbed( bool bEmbed )
81 : {
82 0 : XPropertyListRef pList = GetList();
83 0 : if( pList.is() )
84 0 : pList->SetEmbedInDocument( bEmbed );
85 0 : m_pBoxEmbed->Check( bEmbed );
86 0 : }
87 :
88 0 : bool SvxColorTabPage::GetEmbed()
89 : {
90 0 : XPropertyListRef pList = GetList();
91 0 : return pList.is() && pList->IsEmbedInDocument();
92 : }
93 :
94 0 : IMPL_LINK_NOARG(SvxColorTabPage, EmbedToggleHdl_Impl)
95 : {
96 0 : SetEmbed( m_pBoxEmbed->IsChecked() );
97 0 : return 0;
98 : }
99 :
100 0 : void SvxColorTabPage::HideLoadSaveEmbed()
101 : {
102 0 : m_pBtnLoad->Hide();
103 0 : m_pBtnSave->Hide();
104 0 : m_pBoxEmbed->Hide();
105 0 : }
106 :
107 0 : void SvxColorTabPage::UpdateTableName()
108 : {
109 : // Truncate the name if necessary ...
110 0 : OUString aString( CUI_RES( RID_SVXSTR_TABLE ) );
111 0 : aString += ": ";
112 :
113 0 : XPropertyListRef pList = GetList();
114 0 : if( !pList.is() )
115 0 : return;
116 :
117 0 : INetURLObject aURL( pList->GetPath() );
118 0 : aURL.Append( pList->GetName() );
119 :
120 0 : if ( aURL.getBase().getLength() > 18 )
121 : {
122 0 : aString += aURL.getBase().copy( 0, 15 );
123 0 : aString += "...";
124 : }
125 : else
126 0 : aString += aURL.getBase();
127 :
128 0 : m_pTableName->SetText( aString );
129 : }
130 :
131 :
132 :
133 0 : IMPL_LINK_NOARG(SvxColorTabPage, ClickLoadHdl_Impl)
134 : {
135 0 : sal_uInt16 nReturn = RET_YES;
136 0 : bool bLoaded = false;
137 :
138 0 : if( IsModified() && GetList()->Count() > 0 )
139 : {
140 0 : nReturn = MessageDialog( GetParentDialog()
141 : ,"AskSaveList"
142 0 : ,"cui/ui/querysavelistdialog.ui").Execute();
143 :
144 0 : if ( nReturn == RET_YES )
145 0 : GetList()->Save();
146 : }
147 :
148 0 : if ( nReturn != RET_CANCEL )
149 : {
150 0 : ::sfx2::FileDialogHelper aDlg( css::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE, 0 );
151 0 : OUString aStrFilterType( XPropertyList::GetDefaultExtFilter( meType ) );
152 0 : aDlg.AddFilter( aStrFilterType, aStrFilterType );
153 :
154 0 : INetURLObject aFile( SvtPathOptions().GetPalettePath() );
155 0 : aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) );
156 :
157 0 : if ( aDlg.Execute() == ERRCODE_NONE )
158 : {
159 : XColorListRef pList = XPropertyList::AsColorList(
160 : XPropertyList::CreatePropertyListFromURL(
161 0 : meType, aDlg.GetPath()));
162 0 : if( pList->Load() )
163 : {
164 : // check whether the table may be deleted:
165 0 : SvxAreaTabDialog* pArea = dynamic_cast< SvxAreaTabDialog* >( mpTopDlg );
166 0 : SvxLineTabDialog* pLine = dynamic_cast< SvxLineTabDialog* >( mpTopDlg );
167 :
168 : // FIXME: want to have a generic set and get method by type ...
169 0 : if( pArea )
170 0 : pArea->SetNewColorList( pList );
171 0 : else if( pLine )
172 0 : pLine->SetNewColorList( pList );
173 :
174 0 : bLoaded = true;
175 0 : UpdateTableName();
176 :
177 0 : AddState( CT_CHANGED );
178 0 : SetModified( false );
179 0 : SetEmbed( true );
180 : }
181 : else
182 : {
183 : MessageDialog( mpTopDlg
184 : ,"NoLoadedFileDialog"
185 0 : ,"cui/ui/querynoloadedfiledialog.ui").Execute();
186 0 : }
187 0 : }
188 : }
189 0 : Update( bLoaded );
190 :
191 0 : return 0;
192 : }
193 :
194 0 : void SvxColorTabPage::EnableSave( bool bCanSave )
195 : {
196 0 : if ( bCanSave )
197 0 : m_pBtnSave->Enable();
198 : else
199 0 : m_pBtnSave->Disable();
200 0 : }
201 :
202 :
203 :
204 0 : IMPL_LINK_NOARG(SvxColorTabPage, ClickSaveHdl_Impl)
205 : {
206 : ::sfx2::FileDialogHelper aDlg(
207 0 : css::ui::dialogs::TemplateDescription::FILESAVE_SIMPLE, 0 );
208 :
209 0 : OUString aStrFilterType( XPropertyList::GetDefaultExtFilter( meType ) );
210 0 : aDlg.AddFilter( aStrFilterType, aStrFilterType );
211 :
212 0 : INetURLObject aFile( SvtPathOptions().GetPalettePath() );
213 : DBG_ASSERT( aFile.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" );
214 :
215 0 : XPropertyListRef pList = GetList();
216 :
217 0 : if( !pList->GetName().isEmpty() )
218 : {
219 0 : aFile.Append( pList->GetName() );
220 :
221 0 : if( aFile.getExtension().isEmpty() )
222 0 : aFile.SetExtension( XPropertyList::GetDefaultExt( meType ) );
223 : }
224 :
225 0 : aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) );
226 0 : if ( aDlg.Execute() == ERRCODE_NONE )
227 : {
228 0 : INetURLObject aURL( aDlg.GetPath() );
229 0 : INetURLObject aPathURL( aURL );
230 :
231 0 : aPathURL.removeSegment();
232 0 : aPathURL.removeFinalSlash();
233 :
234 0 : pList->SetName( aURL.getName() );
235 0 : pList->SetPath( aPathURL.GetMainURL( INetURLObject::NO_DECODE ) );
236 :
237 0 : if( pList->Save() )
238 : {
239 0 : UpdateTableName();
240 0 : AddState( CT_SAVED );
241 0 : SetModified( false );
242 : }
243 : else
244 : {
245 : MessageDialog( mpTopDlg
246 : ,"NoSaveFileDialog"
247 0 : ,"cui/ui/querynosavefiledialog.ui").Execute();
248 0 : }
249 : }
250 0 : return 0;
251 : }
252 :
253 0 : void SvxColorTabPage::Update(bool bLoaded)
254 : {
255 0 : pColorList = XColorListRef( static_cast<XColorList *>( GetList().get() ) );
256 :
257 0 : if (bLoaded)
258 : {
259 0 : m_pLbColor->Clear();
260 0 : m_pValSetColorList->Clear();
261 0 : Construct();
262 0 : Reset( &rOutAttrs );
263 :
264 0 : if( m_pLbColor->GetSelectEntryPos() == LISTBOX_ENTRY_NOTFOUND )
265 0 : m_pLbColor->SelectEntryPos( 0 );
266 : else
267 0 : m_pLbColor->SelectEntryPos( m_pLbColor->GetSelectEntryPos() );
268 :
269 0 : sal_Int32 nPos = m_pLbColor->GetSelectEntryPos();
270 0 : if( nPos != LISTBOX_ENTRY_NOTFOUND )
271 : {
272 0 : XColorEntry* pEntry = pColorList->GetColor( nPos );
273 0 : ChangeColor(pEntry->GetColor());
274 : }
275 0 : SelectColorLBHdl_Impl( this );
276 : }
277 :
278 0 : UpdateModified();
279 0 : }
280 :
281 : // FIXME: you have to hate yourself for this - all this
282 : // horrible and broadly unused pointer based coupling
283 : // needs to die. cf SetupForViewFrame
284 : #define COLORPAGE_UNKNOWN ((sal_uInt16)0xFFFF)
285 :
286 : struct SvxColorTabPageShadow
287 : {
288 : sal_uInt16 nUnknownType;
289 : sal_Int32 nUnknownPos;
290 : bool bIsAreaTP;
291 : sal_uInt16 nChangeType;
292 0 : SvxColorTabPageShadow()
293 : : nUnknownType( COLORPAGE_UNKNOWN )
294 : , nUnknownPos( LISTBOX_ENTRY_NOTFOUND )
295 : , bIsAreaTP( false )
296 0 : , nChangeType( 0 )
297 : {
298 0 : }
299 : };
300 :
301 :
302 :
303 0 : SvxColorTabPage::SvxColorTabPage(vcl::Window* pParent, const SfxItemSet& rInAttrs)
304 : : SfxTabPage(pParent, "ColorPage", "cui/ui/colorpage.ui", &rInAttrs)
305 : , meType( XCOLOR_LIST )
306 0 : , mpTopDlg( GetParentDialog() )
307 : , pShadow ( new SvxColorTabPageShadow() )
308 : , rOutAttrs ( rInAttrs )
309 : // All the horrific pointers we store and should not
310 : , pnColorListState( 0 )
311 : , pPageType( NULL )
312 : , nDlgType( 0 )
313 : , pPos( NULL )
314 : , pbAreaTP( NULL )
315 : , aXFStyleItem( drawing::FillStyle_SOLID )
316 : , aXFillColorItem( OUString(), Color( COL_BLACK ) )
317 0 : , aXFillAttr( static_cast<XOutdevItemPool*>( rInAttrs.GetPool() ))
318 0 : , rXFSet( aXFillAttr.GetItemSet() )
319 0 : , eCM( CM_RGB )
320 : {
321 0 : get(m_pBoxEmbed, "embed");
322 0 : get(m_pBtnLoad, "load");
323 0 : get(m_pBtnSave, "save");
324 0 : get(m_pTableName, "colortableft");
325 :
326 0 : get(m_pEdtName, "name");
327 0 : get(m_pLbColor, "colorlb");
328 0 : get(m_pValSetColorList, "colorset");
329 0 : Size aSize = LogicToPixel(Size(94 , 117), MAP_APPFONT);
330 0 : m_pValSetColorList->set_width_request(aSize.Width());
331 0 : m_pValSetColorList->set_height_request(aSize.Height());
332 0 : get(m_pCtlPreviewOld, "oldpreview");
333 0 : get(m_pCtlPreviewNew, "newpreview");
334 0 : aSize = LogicToPixel(Size(34 , 25), MAP_APPFONT);
335 0 : m_pCtlPreviewOld->set_width_request(aSize.Width());
336 0 : m_pCtlPreviewOld->set_height_request(aSize.Height());
337 0 : m_pCtlPreviewNew->set_width_request(aSize.Width());
338 0 : m_pCtlPreviewNew->set_height_request(aSize.Height());
339 0 : get(m_pLbColorModel, "modellb");
340 0 : get(m_pRGB, "rgb");
341 0 : get(m_pR, "R");
342 0 : get(m_pG, "G");
343 0 : get(m_pB, "B");
344 0 : get(m_pCMYK, "cmyk");
345 0 : get(m_pC, "C");
346 0 : get(m_pY, "Y");
347 0 : get(m_pM, "M");
348 0 : get(m_pK, "K");
349 0 : get(m_pBtnAdd, "add");
350 0 : get(m_pBtnModify, "modify");
351 0 : get(m_pBtnWorkOn, "edit");
352 0 : get(m_pBtnDelete, "delete");
353 :
354 0 : m_pBoxEmbed->SetToggleHdl( LINK( this, SvxColorTabPage, EmbedToggleHdl_Impl ) );
355 :
356 0 : m_pBtnLoad->SetClickHdl( LINK( this, SvxColorTabPage, ClickLoadHdl_Impl ) );
357 0 : m_pBtnSave->SetClickHdl( LINK( this, SvxColorTabPage, ClickSaveHdl_Impl ) );
358 :
359 0 : SetEmbed( GetEmbed() );
360 0 : UpdateTableName();
361 :
362 : // this page needs ExchangeSupport
363 0 : SetExchangeSupport();
364 :
365 : // setting the output device
366 0 : rXFSet.Put( aXFStyleItem );
367 0 : rXFSet.Put( aXFillColorItem );
368 0 : m_pCtlPreviewOld->SetAttributes( aXFillAttr.GetItemSet() );
369 0 : m_pCtlPreviewNew->SetAttributes( aXFillAttr.GetItemSet() );
370 :
371 : // overload handler
372 : m_pLbColor->SetSelectHdl(
373 0 : LINK( this, SvxColorTabPage, SelectColorLBHdl_Impl ) );
374 : m_pValSetColorList->SetSelectHdl(
375 0 : LINK( this, SvxColorTabPage, SelectValSetHdl_Impl ) );
376 : m_pLbColorModel->SetSelectHdl(
377 0 : LINK( this, SvxColorTabPage, SelectColorModelHdl_Impl ) );
378 :
379 0 : Link aLink = LINK( this, SvxColorTabPage, ModifiedHdl_Impl );
380 0 : m_pR->SetModifyHdl( aLink );
381 0 : m_pG->SetModifyHdl( aLink );
382 0 : m_pB->SetModifyHdl( aLink );
383 0 : m_pC->SetModifyHdl( aLink );
384 0 : m_pY->SetModifyHdl( aLink );
385 0 : m_pM->SetModifyHdl( aLink );
386 0 : m_pK->SetModifyHdl( aLink );
387 :
388 0 : m_pBtnAdd->SetClickHdl( LINK( this, SvxColorTabPage, ClickAddHdl_Impl ) );
389 0 : m_pBtnModify->SetClickHdl( LINK( this, SvxColorTabPage, ClickModifyHdl_Impl ) );
390 0 : m_pBtnWorkOn->SetClickHdl( LINK( this, SvxColorTabPage, ClickWorkOnHdl_Impl ) );
391 0 : m_pBtnDelete->SetClickHdl( LINK( this, SvxColorTabPage, ClickDeleteHdl_Impl ) );
392 :
393 : // ValueSet
394 0 : m_pValSetColorList->SetStyle( m_pValSetColorList->GetStyle() | WB_ITEMBORDER );
395 0 : m_pValSetColorList->Show();
396 0 : }
397 :
398 0 : SvxColorTabPage::~SvxColorTabPage()
399 : {
400 0 : delete pShadow;
401 0 : }
402 :
403 :
404 :
405 0 : void SvxColorTabPage::ImpColorCountChanged()
406 : {
407 0 : if (!pColorList.is())
408 0 : return;
409 0 : m_pValSetColorList->SetColCount(m_pValSetColorList->getColumnCount());
410 : }
411 :
412 :
413 :
414 0 : void SvxColorTabPage::Construct()
415 : {
416 0 : if (pColorList.is())
417 : {
418 0 : m_pLbColor->Fill(pColorList);
419 0 : m_pValSetColorList->addEntriesForXColorList(*pColorList);
420 0 : ImpColorCountChanged();
421 0 : UpdateTableName();
422 : }
423 0 : }
424 :
425 :
426 :
427 0 : void SvxColorTabPage::ActivatePage( const SfxItemSet& )
428 : {
429 0 : if( nDlgType == 0 ) // area dialog
430 : {
431 0 : *pbAreaTP = false;
432 :
433 0 : if( pColorList.is() )
434 : {
435 0 : if( *pPageType == PT_COLOR && *pPos != LISTBOX_ENTRY_NOTFOUND )
436 : {
437 0 : m_pLbColor->SelectEntryPos( *pPos );
438 0 : m_pValSetColorList->SelectItem( m_pLbColor->GetSelectEntryPos() + 1 );
439 0 : m_pEdtName->SetText( m_pLbColor->GetSelectEntry() );
440 0 : XColorEntry* pEntry = pColorList->GetColor( *pPos );
441 0 : ChangeColor(pEntry->GetColor());
442 : }
443 0 : else if( *pPageType == PT_COLOR && *pPos == LISTBOX_ENTRY_NOTFOUND )
444 : {
445 0 : const SfxPoolItem* pPoolItem = NULL;
446 0 : if( SfxItemState::SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLCOLOR ), true, &pPoolItem ) )
447 : {
448 0 : m_pLbColorModel->SelectEntryPos( CM_RGB );
449 :
450 0 : ChangeColor(static_cast<const XFillColorItem*>(pPoolItem)->GetColorValue());
451 :
452 0 : m_pEdtName->SetText( static_cast<const XFillColorItem*>( pPoolItem )->GetName() );
453 :
454 0 : m_pR->SetValue( ColorToPercent_Impl( aCurrentColor.GetRed() ) );
455 0 : m_pG->SetValue( ColorToPercent_Impl( aCurrentColor.GetGreen() ) );
456 0 : m_pB->SetValue( ColorToPercent_Impl( aCurrentColor.GetBlue() ) );
457 :
458 : // fill ItemSet and pass it on to XOut
459 0 : rXFSet.Put( XFillColorItem( OUString(), aCurrentColor ) );
460 0 : m_pCtlPreviewOld->SetAttributes( aXFillAttr.GetItemSet() );
461 0 : m_pCtlPreviewNew->SetAttributes( aXFillAttr.GetItemSet() );
462 :
463 0 : m_pCtlPreviewNew->Invalidate();
464 0 : m_pCtlPreviewOld->Invalidate();
465 : }
466 : }
467 :
468 : // so that the possibly changed color is discarded
469 0 : SelectColorLBHdl_Impl( this );
470 :
471 0 : *pPageType = PT_COLOR;
472 0 : *pPos = LISTBOX_ENTRY_NOTFOUND;
473 : }
474 : }
475 : else
476 0 : HideLoadSaveEmbed();
477 0 : }
478 :
479 :
480 :
481 0 : int SvxColorTabPage::DeactivatePage( SfxItemSet* _pSet )
482 : {
483 0 : if ( CheckChanges_Impl() == -1L )
484 0 : return( KEEP_PAGE );
485 :
486 0 : if( _pSet )
487 0 : FillItemSet( _pSet );
488 :
489 0 : return( LEAVE_PAGE );
490 : }
491 :
492 :
493 :
494 0 : long SvxColorTabPage::CheckChanges_Impl()
495 : {
496 : // used to NOT lose changes
497 0 : sal_Int32 nPos = m_pLbColor->GetSelectEntryPos();
498 0 : if( nPos != LISTBOX_ENTRY_NOTFOUND )
499 : {
500 0 : Color aColor = pColorList->GetColor( nPos )->GetColor();
501 0 : OUString aString = m_pLbColor->GetSelectEntry();
502 :
503 : // aNewColor, because COL_USER != COL_something, even if RGB values are the same
504 : // Color aNewColor( aColor.GetRed(), aColor.GetGreen(), aColor.GetBlue() );
505 :
506 0 : if( ColorToPercent_Impl( aCurrentColor.GetRed() ) != ColorToPercent_Impl( aColor.GetRed() ) ||
507 0 : ColorToPercent_Impl( aCurrentColor.GetGreen() ) != ColorToPercent_Impl( aColor.GetGreen() ) ||
508 0 : ColorToPercent_Impl( aCurrentColor.GetBlue() ) != ColorToPercent_Impl( aColor.GetBlue() ) ||
509 0 : aString != m_pEdtName->GetText() )
510 : {
511 0 : ResMgr& rMgr = CUI_MGR();
512 0 : Image aWarningBoxImage = WarningBox::GetStandardImage();
513 0 : boost::scoped_ptr<SvxMessDialog> aMessDlg(new SvxMessDialog(GetParentDialog(),
514 0 : SVX_RESSTR( RID_SVXSTR_COLOR ),
515 : ResId( RID_SVXSTR_ASK_CHANGE_COLOR, rMgr ),
516 0 : &aWarningBoxImage ));
517 : aMessDlg->SetButtonText( MESS_BTN_1,
518 0 : ResId( RID_SVXSTR_CHANGE, rMgr ) );
519 : aMessDlg->SetButtonText( MESS_BTN_2,
520 0 : ResId( RID_SVXSTR_ADD, rMgr ) );
521 :
522 0 : short nRet = aMessDlg->Execute();
523 :
524 0 : switch( nRet )
525 : {
526 : case RET_BTN_1:
527 : {
528 0 : ClickModifyHdl_Impl( this );
529 0 : aColor = pColorList->GetColor( nPos )->GetColor();
530 : }
531 0 : break;
532 :
533 : case RET_BTN_2:
534 : {
535 0 : ClickAddHdl_Impl( this );
536 0 : nPos = m_pLbColor->GetSelectEntryPos();
537 0 : aColor = pColorList->GetColor( nPos )->GetColor();
538 : }
539 0 : break;
540 :
541 : case RET_CANCEL:
542 0 : break;
543 0 : }
544 0 : }
545 : }
546 0 : if( nDlgType == 0 ) // area dialog
547 : {
548 0 : nPos = m_pLbColor->GetSelectEntryPos();
549 0 : if( nPos != LISTBOX_ENTRY_NOTFOUND )
550 : {
551 0 : *pPos = nPos;
552 : }
553 : }
554 0 : return 0;
555 : }
556 :
557 :
558 :
559 0 : bool SvxColorTabPage::FillItemSet( SfxItemSet* rSet )
560 : {
561 0 : if( ( nDlgType != 0 ) ||
562 0 : ( *pPageType == PT_COLOR && *pbAreaTP == false ) )
563 : {
564 0 : OUString aString;
565 0 : Color aColor;
566 :
567 0 : sal_Int32 nPos = m_pLbColor->GetSelectEntryPos();
568 0 : if( nPos != LISTBOX_ENTRY_NOTFOUND )
569 : {
570 0 : aColor = pColorList->GetColor( nPos )->GetColor();
571 0 : aString = m_pLbColor->GetSelectEntry();
572 : }
573 : else
574 : {
575 0 : aColor.SetColor (aCurrentColor.GetColor());
576 : }
577 0 : rSet->Put( XFillColorItem( aString, aColor ) );
578 0 : rSet->Put( XFillStyleItem( drawing::FillStyle_SOLID ) );
579 : }
580 :
581 0 : return true;
582 : }
583 :
584 0 : void SvxColorTabPage::UpdateModified()
585 : {
586 0 : bool bEnable = pColorList.is() && pColorList->Count();
587 0 : m_pBtnModify->Enable( bEnable );
588 0 : m_pBtnWorkOn->Enable( bEnable );
589 0 : m_pBtnDelete->Enable( bEnable );
590 0 : EnableSave( bEnable );
591 0 : }
592 :
593 0 : void SvxColorTabPage::Reset( const SfxItemSet* rSet )
594 : {
595 0 : SfxItemState nState = rSet->GetItemState( XATTR_FILLCOLOR );
596 :
597 0 : Color aNewColor;
598 :
599 0 : if ( nState >= SfxItemState::DEFAULT )
600 : {
601 0 : XFillColorItem aColorItem( static_cast<const XFillColorItem&>(rSet->Get( XATTR_FILLCOLOR )) );
602 0 : aNewColor = aColorItem.GetColorValue();
603 0 : m_pLbColor->SelectEntry(aNewColor);
604 0 : m_pValSetColorList->SelectItem( m_pLbColor->GetSelectEntryPos() + 1 );
605 0 : m_pEdtName->SetText( m_pLbColor->GetSelectEntry() );
606 : }
607 :
608 : // set color model
609 0 : OUString aStr = GetUserData();
610 0 : m_pLbColorModel->SelectEntryPos( aStr.toInt32() );
611 :
612 0 : ChangeColor(aNewColor);
613 0 : SelectColorModelHdl_Impl( this );
614 :
615 0 : m_pCtlPreviewOld->Invalidate();
616 0 : UpdateModified();
617 0 : }
618 :
619 :
620 :
621 0 : SfxTabPage* SvxColorTabPage::Create( vcl::Window* pWindow,
622 : const SfxItemSet* rOutAttrs )
623 : {
624 0 : return( new SvxColorTabPage( pWindow, *rOutAttrs ) );
625 : }
626 :
627 : // is called when the content of the MtrFields is changed for color values
628 0 : IMPL_LINK_NOARG(SvxColorTabPage, ModifiedHdl_Impl)
629 : {
630 0 : if (eCM == CM_RGB)
631 : {
632 : // read current MtrFields, if cmyk, then k-value as transparency
633 0 : aCurrentColor.SetColor ( Color( (sal_uInt8)PercentToColor_Impl( (sal_uInt16) m_pR->GetValue() ),
634 0 : (sal_uInt8)PercentToColor_Impl( (sal_uInt16) m_pG->GetValue() ),
635 0 : (sal_uInt8)PercentToColor_Impl( (sal_uInt16) m_pB->GetValue() ) ).GetColor() );
636 : }
637 : else
638 : {
639 : // read current MtrFields, if cmyk, then k-value as transparency
640 0 : aCurrentColor.SetColor ( Color( (sal_uInt8)PercentToColor_Impl( (sal_uInt16) m_pK->GetValue() ),
641 0 : (sal_uInt8)PercentToColor_Impl( (sal_uInt16) m_pC->GetValue() ),
642 0 : (sal_uInt8)PercentToColor_Impl( (sal_uInt16) m_pY->GetValue() ),
643 0 : (sal_uInt8)PercentToColor_Impl( (sal_uInt16) m_pM->GetValue() ) ).GetColor() );
644 0 : ConvertColorValues (aCurrentColor, CM_RGB);
645 : }
646 :
647 0 : rXFSet.Put( XFillColorItem( OUString(), aCurrentColor ) );
648 0 : m_pCtlPreviewNew->SetAttributes( aXFillAttr.GetItemSet() );
649 :
650 0 : m_pCtlPreviewNew->Invalidate();
651 :
652 0 : return 0;
653 : }
654 :
655 :
656 :
657 0 : IMPL_LINK_NOARG(SvxColorTabPage, ClickAddHdl_Impl)
658 : {
659 0 : vcl::Window *pWindow = this;
660 0 : while( pWindow )
661 : {
662 0 : pWindow = pWindow->GetParent();
663 : }
664 :
665 0 : ResMgr& rMgr = CUI_MGR();
666 0 : OUString aDesc( ResId( RID_SVXSTR_DESC_COLOR, rMgr ) );
667 0 : OUString aName( m_pEdtName->GetText() );
668 : XColorEntry* pEntry;
669 0 : long nCount = pColorList->Count();
670 0 : bool bDifferent = true;
671 :
672 : // check if name is already existing
673 0 : for ( long i = 0; i < nCount && bDifferent; i++ )
674 0 : if ( aName == pColorList->GetColor( i )->GetName() )
675 0 : bDifferent = false;
676 :
677 : // if yes, it is repeated and a new name is demanded
678 0 : if ( !bDifferent )
679 : {
680 0 : MessageDialog aWarningBox( GetParentDialog()
681 : ,"DuplicateNameDialog"
682 0 : ,"cui/ui/queryduplicatedialog.ui");
683 0 : aWarningBox.Execute();
684 :
685 0 : SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
686 0 : boost::scoped_ptr<AbstractSvxNameDialog> pDlg(pFact->CreateSvxNameDialog( GetParentDialog(), aName, aDesc ));
687 0 : bool bLoop = true;
688 :
689 0 : while ( !bDifferent && bLoop && pDlg->Execute() == RET_OK )
690 : {
691 0 : pDlg->GetName( aName );
692 0 : bDifferent = true;
693 :
694 0 : for( long i = 0; i < nCount && bDifferent; i++ )
695 : {
696 0 : if( aName == pColorList->GetColor( i )->GetName() )
697 0 : bDifferent = false;
698 : }
699 :
700 0 : if( bDifferent )
701 0 : bLoop = false;
702 : else
703 0 : aWarningBox.Execute();
704 0 : }
705 : }
706 :
707 : // if not existing the entry is entered
708 0 : if( bDifferent )
709 : {
710 0 : pEntry = new XColorEntry( aCurrentColor, aName );
711 :
712 0 : pColorList->Insert( pEntry, pColorList->Count() );
713 :
714 0 : m_pLbColor->Append( *pEntry );
715 0 : m_pValSetColorList->InsertItem( m_pValSetColorList->GetItemCount() + 1, pEntry->GetColor(), pEntry->GetName() );
716 0 : ImpColorCountChanged();
717 :
718 0 : m_pLbColor->SelectEntryPos( m_pLbColor->GetEntryCount() - 1 );
719 :
720 0 : *pnColorListState |= CT_MODIFIED;
721 :
722 0 : SelectColorLBHdl_Impl( this );
723 : }
724 0 : UpdateModified();
725 :
726 0 : return 0;
727 : }
728 :
729 :
730 :
731 0 : IMPL_LINK_NOARG(SvxColorTabPage, ClickModifyHdl_Impl)
732 : {
733 0 : sal_Int32 nPos = m_pLbColor->GetSelectEntryPos();
734 :
735 0 : if( nPos != LISTBOX_ENTRY_NOTFOUND )
736 : {
737 0 : ResMgr& rMgr = CUI_MGR();
738 0 : OUString aDesc( ResId( RID_SVXSTR_DESC_COLOR, rMgr ) );
739 0 : OUString aName( m_pEdtName->GetText() );
740 0 : long nCount = pColorList->Count();
741 0 : bool bDifferent = true;
742 :
743 : // check if name is already existing
744 0 : for ( long i = 0; i < nCount && bDifferent; i++ )
745 0 : if ( aName == pColorList->GetColor( i )->GetName() && nPos != i )
746 0 : bDifferent = false;
747 :
748 : // if yes, it is repeated and a new name is demanded
749 0 : if ( !bDifferent )
750 : {
751 0 : MessageDialog aWarningBox( GetParentDialog()
752 : ,"DuplicateNameDialog"
753 0 : ,"cui/ui/queryduplicatedialog.ui");
754 0 : aWarningBox.Execute();
755 :
756 0 : SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
757 0 : boost::scoped_ptr<AbstractSvxNameDialog> pDlg(pFact->CreateSvxNameDialog( GetParentDialog(), aName, aDesc ));
758 0 : bool bLoop = true;
759 :
760 0 : while ( !bDifferent && bLoop && pDlg->Execute() == RET_OK )
761 : {
762 0 : pDlg->GetName( aName );
763 0 : bDifferent = true;
764 :
765 0 : for ( long i = 0; i < nCount && bDifferent; i++ )
766 0 : if( aName == pColorList->GetColor( i )->GetName() && nPos != i )
767 0 : bDifferent = false;
768 :
769 0 : if( bDifferent )
770 0 : bLoop = false;
771 : else
772 0 : aWarningBox.Execute();
773 0 : }
774 : }
775 :
776 : // if not existing the entry is entered
777 0 : if( bDifferent )
778 : {
779 : // #123497# Need to replace the existing entry with a new one (old returned needs to be deleted)
780 0 : XColorEntry* pEntry = new XColorEntry(aCurrentColor, aName);
781 0 : delete pColorList->Replace(pEntry, nPos);
782 :
783 0 : m_pLbColor->Modify( *pEntry, nPos );
784 0 : m_pLbColor->SelectEntryPos( nPos );
785 :
786 0 : m_pValSetColorList->SetItemColor( nPos + 1, pEntry->GetColor() );
787 0 : m_pValSetColorList->SetItemText( nPos + 1, pEntry->GetName() );
788 0 : m_pEdtName->SetText( aName );
789 :
790 0 : m_pCtlPreviewOld->Invalidate();
791 :
792 0 : *pnColorListState |= CT_MODIFIED;
793 0 : }
794 : }
795 0 : return 0;
796 : }
797 :
798 :
799 :
800 0 : IMPL_LINK_NOARG(SvxColorTabPage, ClickWorkOnHdl_Impl)
801 : {
802 0 : boost::scoped_ptr<SvColorDialog> pColorDlg(new SvColorDialog( GetParentDialog() ));
803 :
804 0 : pColorDlg->SetColor (aCurrentColor);
805 0 : pColorDlg->SetMode( svtools::ColorPickerMode_MODIFY );
806 :
807 0 : if( pColorDlg->Execute() == RET_OK )
808 : {
809 0 : sal_uInt16 nK = 0;
810 0 : Color aPreviewColor = pColorDlg->GetColor();
811 0 : aCurrentColor = aPreviewColor;
812 0 : if (eCM != CM_RGB)
813 : {
814 0 : ConvertColorValues (aCurrentColor, eCM);
815 0 : m_pC->SetValue( ColorToPercent_Impl( aCurrentColor.GetRed() ) );
816 0 : m_pY->SetValue( ColorToPercent_Impl( aCurrentColor.GetGreen() ) );
817 0 : m_pM->SetValue( ColorToPercent_Impl( aCurrentColor.GetBlue() ) );
818 0 : m_pK->SetValue( ColorToPercent_Impl( nK ) );
819 0 : ConvertColorValues (aCurrentColor, CM_RGB);
820 : }
821 : else
822 : {
823 0 : m_pR->SetValue( ColorToPercent_Impl( aCurrentColor.GetRed() ) );
824 0 : m_pG->SetValue( ColorToPercent_Impl( aCurrentColor.GetGreen() ) );
825 0 : m_pB->SetValue( ColorToPercent_Impl( aCurrentColor.GetBlue() ) );
826 : }
827 :
828 : // fill ItemSet and pass it on to XOut
829 0 : rXFSet.Put( XFillColorItem( OUString(), aPreviewColor ) );
830 : //m_pCtlPreviewOld->SetAttributes( aXFillAttr );
831 0 : m_pCtlPreviewNew->SetAttributes( aXFillAttr.GetItemSet() );
832 :
833 0 : m_pCtlPreviewNew->Invalidate();
834 : }
835 :
836 0 : return 0;
837 : }
838 :
839 :
840 :
841 0 : IMPL_LINK_NOARG(SvxColorTabPage, ClickDeleteHdl_Impl)
842 : {
843 0 : sal_Int32 nPos = m_pLbColor->GetSelectEntryPos();
844 :
845 0 : if( nPos != LISTBOX_ENTRY_NOTFOUND )
846 : {
847 0 : MessageDialog aQueryBox( GetParentDialog(),"AskDelColorDialog","cui/ui/querydeletecolordialog.ui");
848 :
849 0 : if( aQueryBox.Execute() == RET_YES )
850 : {
851 0 : XColorEntry* pEntry = pColorList->Remove( nPos );
852 : DBG_ASSERT( pEntry, "ColorEntry not found !" );
853 0 : delete pEntry;
854 :
855 : // update Listbox and ValueSet
856 0 : m_pLbColor->RemoveEntry( nPos );
857 0 : m_pValSetColorList->Clear();
858 0 : m_pValSetColorList->addEntriesForXColorList(*pColorList);
859 0 : ImpColorCountChanged();
860 : //FillValueSet_Impl(*m_pValSetColorList);
861 :
862 : // positioning
863 0 : m_pLbColor->SelectEntryPos( nPos );
864 0 : SelectColorLBHdl_Impl( this );
865 :
866 0 : m_pCtlPreviewOld->Invalidate();
867 :
868 0 : *pnColorListState |= CT_MODIFIED;
869 0 : }
870 : }
871 0 : UpdateModified();
872 :
873 0 : return 0;
874 : }
875 :
876 :
877 :
878 0 : IMPL_LINK_NOARG(SvxColorTabPage, SelectColorLBHdl_Impl)
879 : {
880 0 : sal_Int32 nPos = m_pLbColor->GetSelectEntryPos();
881 0 : if( nPos != LISTBOX_ENTRY_NOTFOUND )
882 : {
883 0 : m_pValSetColorList->SelectItem( nPos + 1 );
884 0 : m_pEdtName->SetText( m_pLbColor->GetSelectEntry() );
885 :
886 : rXFSet.Put( XFillColorItem( OUString(),
887 0 : m_pLbColor->GetSelectEntryColor() ) );
888 0 : m_pCtlPreviewOld->SetAttributes( aXFillAttr.GetItemSet() );
889 0 : m_pCtlPreviewNew->SetAttributes( aXFillAttr.GetItemSet() );
890 :
891 0 : m_pCtlPreviewOld->Invalidate();
892 0 : m_pCtlPreviewNew->Invalidate();
893 :
894 0 : XColorEntry* pEntry = pColorList->GetColor(nPos);
895 0 : ChangeColor(pEntry->GetColor());
896 : }
897 0 : return 0;
898 : }
899 :
900 :
901 :
902 0 : IMPL_LINK_NOARG(SvxColorTabPage, SelectValSetHdl_Impl)
903 : {
904 0 : sal_Int32 nPos = m_pValSetColorList->GetSelectItemId();
905 0 : if( nPos != LISTBOX_ENTRY_NOTFOUND )
906 : {
907 0 : m_pLbColor->SelectEntryPos( nPos - 1 );
908 0 : m_pEdtName->SetText( m_pLbColor->GetSelectEntry() );
909 :
910 : rXFSet.Put( XFillColorItem( OUString(),
911 0 : m_pLbColor->GetSelectEntryColor() ) );
912 0 : m_pCtlPreviewOld->SetAttributes( aXFillAttr.GetItemSet() );
913 0 : m_pCtlPreviewNew->SetAttributes( aXFillAttr.GetItemSet() );
914 :
915 0 : m_pCtlPreviewOld->Invalidate();
916 0 : m_pCtlPreviewNew->Invalidate();
917 :
918 0 : XColorEntry* pEntry = pColorList->GetColor(nPos-1);
919 0 : ChangeColor(pEntry->GetColor());
920 : }
921 0 : return 0;
922 : }
923 :
924 :
925 :
926 0 : void SvxColorTabPage::ConvertColorValues (Color& rColor, ColorModel eModell)
927 : {
928 0 : switch (eModell)
929 : {
930 : case CM_RGB:
931 : {
932 0 : CmykToRgb_Impl (rColor, (sal_uInt16)rColor.GetTransparency() );
933 0 : rColor.SetTransparency ((sal_uInt8) 0);
934 : }
935 0 : break;
936 :
937 : case CM_CMYK:
938 : {
939 : sal_uInt16 nK;
940 0 : RgbToCmyk_Impl (rColor, nK );
941 0 : rColor.SetTransparency ((sal_uInt8) nK);
942 : }
943 0 : break;
944 : }
945 0 : }
946 :
947 0 : IMPL_LINK_NOARG(SvxColorTabPage, SelectColorModelHdl_Impl)
948 : {
949 0 : int nPos = m_pLbColorModel->GetSelectEntryPos();
950 0 : if( nPos != LISTBOX_ENTRY_NOTFOUND )
951 : {
952 0 : eCM = (ColorModel) nPos;
953 :
954 0 : switch( eCM )
955 : {
956 : case CM_RGB:
957 : {
958 0 : m_pRGB->Show();
959 0 : m_pCMYK->Hide();
960 :
961 : }
962 0 : break;
963 :
964 : case CM_CMYK:
965 : {
966 0 : m_pCMYK->Show();
967 0 : m_pRGB->Hide();
968 : }
969 0 : break;
970 : }
971 :
972 0 : ChangeColor(aCurrentColor);
973 :
974 : }
975 :
976 0 : return 0;
977 : }
978 :
979 :
980 :
981 0 : void SvxColorTabPage::ChangeColor(const Color &rNewColor)
982 : {
983 0 : aCurrentColor = rNewColor;
984 0 : if (eCM != CM_RGB)
985 : {
986 0 : ConvertColorValues (aCurrentColor, eCM);
987 0 : m_pC->SetValue( ColorToPercent_Impl( aCurrentColor.GetRed() ) );
988 0 : m_pY->SetValue( ColorToPercent_Impl( aCurrentColor.GetGreen() ) );
989 0 : m_pM->SetValue( ColorToPercent_Impl( aCurrentColor.GetBlue() ) );
990 0 : m_pK->SetValue( ColorToPercent_Impl( aCurrentColor.GetTransparency() ) );
991 0 : ConvertColorValues (aCurrentColor, CM_RGB);
992 : }
993 : else
994 : {
995 0 : m_pR->SetValue( ColorToPercent_Impl( aCurrentColor.GetRed() ) );
996 0 : m_pG->SetValue( ColorToPercent_Impl( aCurrentColor.GetGreen() ) );
997 0 : m_pB->SetValue( ColorToPercent_Impl( aCurrentColor.GetBlue() ) );
998 : }
999 :
1000 : // fill ItemSet and pass it on to XOut
1001 0 : rXFSet.Put( XFillColorItem( OUString(), aCurrentColor ) );
1002 0 : m_pCtlPreviewOld->SetAttributes( aXFillAttr.GetItemSet() );
1003 0 : m_pCtlPreviewNew->SetAttributes( aXFillAttr.GetItemSet() );
1004 :
1005 0 : m_pCtlPreviewNew->Invalidate();
1006 0 : }
1007 :
1008 :
1009 :
1010 : //void SvxColorTabPage::FillValueSet_Impl( ValueSet& rVs )
1011 : //{
1012 : // long nCount = pColorList->Count();
1013 : // XColorEntry* pColorEntry;
1014 :
1015 : // if( nCount > 104 )
1016 : // rVs.SetStyle( rVs.GetStyle() | WB_VSCROLL );
1017 :
1018 : // for( long i = 0; i < nCount; i++ )
1019 : // {
1020 : // pColorEntry = pColorList->GetColor( i );
1021 : // rVs.InsertItem( i + 1, pColorEntry->GetColor(), pColorEntry->GetName() );
1022 : // }
1023 : //}
1024 :
1025 :
1026 :
1027 : // A RGB value is converted to a CMYK value - not in an ideal way as
1028 : // R is converted into C, G into M and B into Y. The K value is held in an
1029 : // extra variable. For further color models one should develop own
1030 : // classes which should contain the respective casts.
1031 :
1032 0 : void SvxColorTabPage::RgbToCmyk_Impl( Color& rColor, sal_uInt16& rK )
1033 : {
1034 0 : sal_uInt16 const nColor1 = 255 - rColor.GetRed();
1035 0 : sal_uInt16 const nColor2 = 255 - rColor.GetGreen();
1036 0 : sal_uInt16 const nColor3 = 255 - rColor.GetBlue();
1037 :
1038 0 : rK = std::min( std::min( nColor1, nColor2 ), nColor3 );
1039 :
1040 0 : rColor.SetRed( sal::static_int_cast< sal_uInt8 >( nColor1 - rK ) );
1041 0 : rColor.SetGreen( sal::static_int_cast< sal_uInt8 >( nColor2 - rK ) );
1042 0 : rColor.SetBlue( sal::static_int_cast< sal_uInt8 >( nColor3 - rK ) );
1043 0 : }
1044 :
1045 :
1046 :
1047 : // reverse case to RgbToCmyk_Impl (see above)
1048 :
1049 0 : void SvxColorTabPage::CmykToRgb_Impl( Color& rColor, const sal_uInt16 nK )
1050 : {
1051 : long lTemp;
1052 :
1053 0 : lTemp = 255 - ( rColor.GetRed() + nK );
1054 :
1055 0 : if( lTemp < 0L )
1056 0 : lTemp = 0L;
1057 0 : rColor.SetRed( (sal_uInt8)lTemp );
1058 :
1059 0 : lTemp = 255 - ( rColor.GetGreen() + nK );
1060 :
1061 0 : if( lTemp < 0L )
1062 0 : lTemp = 0L;
1063 0 : rColor.SetGreen( (sal_uInt8)lTemp );
1064 :
1065 0 : lTemp = 255 - ( rColor.GetBlue() + nK );
1066 :
1067 0 : if( lTemp < 0L )
1068 0 : lTemp = 0L;
1069 0 : rColor.SetBlue( (sal_uInt8)lTemp );
1070 0 : }
1071 :
1072 :
1073 :
1074 0 : sal_uInt16 SvxColorTabPage::ColorToPercent_Impl( sal_uInt16 nColor )
1075 : {
1076 0 : sal_uInt16 nWert = 0;
1077 :
1078 0 : switch (eCM)
1079 : {
1080 : case CM_RGB :
1081 0 : nWert = nColor;
1082 0 : break;
1083 :
1084 : case CM_CMYK:
1085 0 : nWert = (sal_uInt16) ( (double) nColor * 100.0 / 255.0 + 0.5 );
1086 0 : break;
1087 : }
1088 :
1089 0 : return ( nWert );
1090 : }
1091 :
1092 :
1093 :
1094 0 : sal_uInt16 SvxColorTabPage::PercentToColor_Impl( sal_uInt16 nPercent )
1095 : {
1096 0 : sal_uInt16 nWert = 0;
1097 :
1098 0 : switch (eCM)
1099 : {
1100 : case CM_RGB :
1101 0 : nWert = nPercent;
1102 0 : break;
1103 :
1104 : case CM_CMYK:
1105 0 : nWert = (sal_uInt16) ( (double) nPercent * 255.0 / 100.0 + 0.5 );
1106 0 : break;
1107 : }
1108 :
1109 0 : return ( nWert );
1110 : }
1111 :
1112 :
1113 :
1114 0 : void SvxColorTabPage::FillUserData()
1115 : {
1116 : // the color model is saved in the Ini-file
1117 0 : SetUserData( OUString::number( eCM ) );
1118 0 : }
1119 :
1120 :
1121 :
1122 0 : void SvxColorTabPage::SetupForViewFrame( SfxViewFrame *pViewFrame )
1123 : {
1124 0 : const OfaRefItem<XColorList> *pPtr = NULL;
1125 0 : if ( pViewFrame != NULL && pViewFrame->GetDispatcher() )
1126 : pPtr = static_cast<const OfaRefItem<XColorList> *>(pViewFrame->
1127 : GetDispatcher()->Execute( SID_GET_COLORLIST,
1128 0 : SfxCallMode::SYNCHRON ));
1129 0 : pColorList = pPtr ? pPtr->GetValue() : XColorList::GetStdColorList();
1130 :
1131 0 : SetPageType( &pShadow->nUnknownType );
1132 0 : SetDlgType( COLORPAGE_UNKNOWN );
1133 0 : SetPos( &pShadow->nUnknownPos );
1134 0 : SetAreaTP( &pShadow->bIsAreaTP );
1135 0 : SetColorChgd( (ChangeType*)&pShadow->nChangeType );
1136 0 : Construct();
1137 0 : }
1138 :
1139 0 : void SvxColorTabPage::SaveToViewFrame( SfxViewFrame *pViewFrame )
1140 : {
1141 0 : if( !pColorList.is() )
1142 0 : return;
1143 :
1144 0 : pColorList->Save();
1145 :
1146 0 : if( !pViewFrame )
1147 0 : return;
1148 :
1149 : // notify current viewframe that it uses the same color table
1150 0 : if ( !pViewFrame->GetDispatcher() )
1151 0 : return;
1152 :
1153 : const OfaRefItem<XColorList> * pPtr;
1154 0 : pPtr = static_cast<const OfaRefItem<XColorList>*>(pViewFrame->GetDispatcher()->Execute( SID_GET_COLORLIST, SfxCallMode::SYNCHRON ));
1155 0 : if( pPtr )
1156 : {
1157 0 : XColorListRef pReference = pPtr->GetValue();
1158 :
1159 0 : if( pReference.is() &&
1160 0 : pReference->GetPath() == pColorList->GetPath() &&
1161 0 : pReference->GetName() == pColorList->GetName() )
1162 0 : SfxObjectShell::Current()->PutItem( SvxColorListItem( pColorList,
1163 0 : SID_COLOR_TABLE ) );
1164 : }
1165 : }
1166 :
1167 0 : void SvxColorTabPage::SetPropertyList( XPropertyListType t, const XPropertyListRef &xRef )
1168 : {
1169 : (void) t;
1170 : OSL_ASSERT( t == XCOLOR_LIST );
1171 0 : pColorList = XColorListRef( static_cast<XColorList *>(xRef.get() ) );
1172 0 : }
1173 :
1174 0 : void SvxColorTabPage::SetColorList( XColorListRef pColList )
1175 : {
1176 0 : SetPropertyList( XCOLOR_LIST, XPropertyListRef( ( pColList.get() ) ) );
1177 0 : }
1178 :
1179 0 : XPropertyListRef SvxColorTabPage::GetPropertyList( XPropertyListType t )
1180 : {
1181 : (void) t;
1182 : OSL_ASSERT( t == XCOLOR_LIST );
1183 0 : return XPropertyListRef( pColorList.get() );
1184 0 : }
1185 :
1186 :
1187 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
1188 :
|