LCOV - code coverage report
Current view: top level - cui/source/tabpages - tpcolor.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 0 636 0.0 %
Date: 2015-06-13 12:38:46 Functions: 0 56 0.0 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.11