LCOV - code coverage report
Current view: top level - svx/source/tbxctrls - PaletteManager.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 34 123 27.6 %
Date: 2014-11-03 Functions: 7 18 38.9 %
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 <svx/PaletteManager.hxx>
      21             : #include <osl/file.hxx>
      22             : #include <unotools/pathoptions.hxx>
      23             : #include <sfx2/objsh.hxx>
      24             : #include <svx/drawitem.hxx>
      25             : #include <svx/dialogs.hrc>
      26             : #include <svtools/colrdlg.hxx>
      27             : #include <vcl/svapp.hxx>
      28             : #include <vcl/settings.hxx>
      29             : 
      30             : #define STR_DEFAULT_PAL         "Default palette"
      31             : #define STR_DOC_COLORS          "Document colors"
      32             : #define STR_DOC_COLOR_PREFIX    "Document Color "
      33             : 
      34        6730 : PaletteManager::PaletteManager() :
      35        6730 :     mnMaxRecentColors(Application::GetSettings().GetStyleSettings().GetColorValueSetColumnCount()),
      36             :     mnNumOfPalettes(2),
      37             :     mnCurrentPalette(0),
      38             :     mnColorCount(0),
      39             :     mpBtnUpdater(NULL),
      40        6730 :     mLastColor(COL_AUTO)
      41             : {
      42        6730 :     LoadPalettes();
      43        6730 :     mnNumOfPalettes += maPalettes.size();
      44        6730 : }
      45             : 
      46        6730 : PaletteManager::~PaletteManager()
      47             : {
      48        6730 : }
      49             : 
      50        6730 : void PaletteManager::LoadPalettes()
      51             : {
      52        6730 :     maPalettes.clear();
      53        6730 :     OUString aPalPath = SvtPathOptions().GetPalettePath();
      54             : 
      55       13460 :     osl::Directory aDir(aPalPath);
      56       13460 :     osl::DirectoryItem aDirItem;
      57             :     osl::FileStatus aFileStat( osl_FileStatus_Mask_FileName |
      58             :                                osl_FileStatus_Mask_FileURL  |
      59       13460 :                                osl_FileStatus_Mask_Type     );
      60        6730 :     if( aDir.open() == osl::FileBase::E_None )
      61             :     {
      62      144830 :         while( aDir.getNextItem(aDirItem) == osl::FileBase::E_None )
      63             :         {
      64      131370 :             aDirItem.getFileStatus(aFileStat);
      65      131370 :             if(aFileStat.isRegular() || aFileStat.isLink())
      66             :             {
      67      124640 :                 OUString aFName = aFileStat.getFileName();
      68      124640 :                 Palette* pPalette = 0;
      69      124640 :                 if( aFName.endsWithIgnoreAsciiCase(".gpl") )
      70           0 :                     pPalette = new PaletteGPL( aFileStat.getFileURL(), aFName );
      71      124640 :                 else if( aFName.endsWithIgnoreAsciiCase(".soc") )
      72       56088 :                     pPalette = new PaletteSOC( aFileStat.getFileURL(), aFName );
      73             : 
      74      124640 :                 if( pPalette && pPalette->IsValid() )
      75       56088 :                     maPalettes.push_back( pPalette );
      76             :             }
      77             :         }
      78        6730 :     }
      79        6730 : }
      80             : 
      81           0 : void PaletteManager::ReloadColorSet(SvxColorValueSet &rColorSet)
      82             : {
      83           0 :     SfxObjectShell* pDocSh = SfxObjectShell::Current();
      84             : 
      85           0 :     if( mnCurrentPalette == 0 )
      86             :     {
      87           0 :         const SfxPoolItem* pItem = NULL;
      88           0 :         XColorListRef pColorList;
      89             : 
      90           0 :         if ( pDocSh )
      91             :         {
      92           0 :             if ( 0 != ( pItem = pDocSh->GetItem( SID_COLOR_TABLE ) ) )
      93           0 :                 pColorList = static_cast<const SvxColorListItem*>(pItem)->GetColorList();
      94             :         }
      95             : 
      96           0 :         if ( !pColorList.is() )
      97           0 :             pColorList = XColorList::CreateStdColorList();
      98             : 
      99             : 
     100           0 :         if ( pColorList.is() )
     101             :         {
     102           0 :             mnColorCount = pColorList->Count();
     103           0 :             rColorSet.Clear();
     104           0 :             rColorSet.addEntriesForXColorList(*pColorList);
     105           0 :         }
     106             :     }
     107           0 :     else if( mnCurrentPalette == mnNumOfPalettes - 1 )
     108             :     {
     109             :         // Add doc colors to palette
     110           0 :         std::vector<Color> aColors = pDocSh->GetDocColors();
     111           0 :         mnColorCount = aColors.size();
     112           0 :         rColorSet.Clear();
     113           0 :         rColorSet.addEntriesForColorVector(aColors, STR_DOC_COLOR_PREFIX );
     114             :     }
     115             :     else
     116             :     {
     117           0 :         maPalettes[mnCurrentPalette-1].LoadColorSet( rColorSet );
     118           0 :         mnColorCount = rColorSet.GetItemCount();
     119             :     }
     120           0 : }
     121             : 
     122           0 : void PaletteManager::ReloadRecentColorSet(SvxColorValueSet& rColorSet)
     123             : {
     124           0 :     rColorSet.Clear();
     125           0 :     int nIx = 1;
     126           0 :     for(std::deque<Color>::const_iterator it = maRecentColors.begin();
     127           0 :         it != maRecentColors.end(); ++it)
     128             :     {
     129           0 :         rColorSet.InsertItem(nIx, *it, "");
     130           0 :         ++nIx;
     131             :     }
     132           0 : }
     133             : 
     134           0 : std::vector<OUString> PaletteManager::GetPaletteList()
     135             : {
     136           0 :     std::vector<OUString> aPaletteNames;
     137             : 
     138           0 :     aPaletteNames.push_back( STR_DEFAULT_PAL );
     139             : 
     140           0 :     for( boost::ptr_vector<Palette>::iterator it = maPalettes.begin();
     141           0 :          it != maPalettes.end();
     142             :          ++it)
     143             :     {
     144           0 :         aPaletteNames.push_back( (*it).GetName() );
     145             :     }
     146             : 
     147           0 :     aPaletteNames.push_back( STR_DOC_COLORS );
     148             : 
     149           0 :     return aPaletteNames;
     150             : }
     151             : 
     152           0 : void PaletteManager::SetPalette( sal_Int32 nPos )
     153             : {
     154           0 :     mnCurrentPalette = nPos;
     155           0 : }
     156             : 
     157           0 : sal_Int32 PaletteManager::GetPalette()
     158             : {
     159           0 :     return mnCurrentPalette;
     160             : }
     161             : 
     162           0 : long PaletteManager::GetColorCount()
     163             : {
     164           0 :     return mnColorCount;
     165             : }
     166             : 
     167           0 : long PaletteManager::GetRecentColorCount()
     168             : {
     169           0 :     return maRecentColors.size();
     170             : }
     171             : 
     172           0 : const Color& PaletteManager::GetLastColor()
     173             : {
     174           0 :     return mLastColor;
     175             : }
     176             : 
     177        6730 : void PaletteManager::SetLastColor(const Color& rLastColor)
     178             : {
     179        6730 :     mLastColor = rLastColor;
     180        6730 : }
     181             : 
     182           0 : void PaletteManager::AddRecentColor(const Color& rRecentColor)
     183             : {
     184             :     std::deque<Color>::iterator itColor =
     185           0 :         std::find(maRecentColors.begin(), maRecentColors.end(), rRecentColor);
     186             :     // if recent color to be added is already in list, remove it
     187           0 :     if( itColor != maRecentColors.end() )
     188           0 :         maRecentColors.erase( itColor );
     189             : 
     190           0 :     maRecentColors.push_front( rRecentColor );
     191           0 :     if( maRecentColors.size() > mnMaxRecentColors )
     192           0 :         maRecentColors.pop_back();
     193           0 : }
     194             : 
     195        6730 : void PaletteManager::SetBtnUpdater(svx::ToolboxButtonColorUpdater* pBtnUpdater)
     196             : {
     197        6730 :     mpBtnUpdater = pBtnUpdater;
     198        6730 : }
     199             : 
     200           0 : void PaletteManager::PopupColorPicker(const OUString& aCommand)
     201             : {
     202             :     // The calling object goes away during aColorDlg.Execute(), so we must copy this
     203           0 :     OUString aCommandCopy = aCommand;
     204           0 :     SvColorDialog aColorDlg( 0 );
     205           0 :     aColorDlg.SetColor ( mLastColor );
     206           0 :     aColorDlg.SetMode( svtools::ColorPickerMode_MODIFY );
     207           0 :     if( aColorDlg.Execute() == RET_OK )
     208             :     {
     209           0 :         if (mpBtnUpdater)
     210           0 :             mpBtnUpdater->Update( aColorDlg.GetColor() );
     211           0 :         mLastColor = aColorDlg.GetColor();
     212           0 :         AddRecentColor( mLastColor );
     213           0 :         DispatchColorCommand(aCommandCopy, mLastColor);
     214           0 :     }
     215           0 : }
     216             : 
     217           0 : void PaletteManager::DispatchColorCommand(const OUString& aCommand, const Color aColor)
     218             : {
     219             :     using namespace css::uno;
     220             :     using namespace css::frame;
     221             :     using namespace css::beans;
     222             :     using namespace css::util;
     223             : 
     224           0 :     Reference<XComponentContext> xContext(comphelper::getProcessComponentContext());
     225           0 :     Reference<XDesktop2> xDesktop = Desktop::create(xContext);
     226           0 :     Reference<XDispatchProvider> xDispatchProvider(xDesktop->getCurrentFrame(), UNO_QUERY );
     227           0 :     if (xDispatchProvider.is())
     228             :     {
     229           0 :         INetURLObject aObj( aCommand );
     230             : 
     231           0 :         Sequence<PropertyValue> aArgs(1);
     232           0 :         aArgs[0].Name = aObj.GetURLPath();
     233           0 :         aArgs[0].Value = makeAny(sal_Int32(aColor.GetColor()));
     234             : 
     235           0 :         URL aTargetURL;
     236           0 :         aTargetURL.Complete = aCommand;
     237           0 :         Reference<XURLTransformer> xURLTransformer(URLTransformer::create(comphelper::getProcessComponentContext()));
     238           0 :         xURLTransformer->parseStrict(aTargetURL);
     239             : 
     240           0 :         Reference<XDispatch> xDispatch = xDispatchProvider->queryDispatch(aTargetURL, OUString(), 0);
     241           0 :         if (xDispatch.is())
     242           0 :             xDispatch->dispatch(aTargetURL, aArgs);
     243           0 :     }
     244         651 : }
     245             : 
     246             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10