LCOV - code coverage report
Current view: top level - svl/source/items - IndexedStyleSheets.cxx (source / functions) Hit Total Coverage
Test: commit e02a6cb2c3e2b23b203b422e4e0680877f232636 Lines: 0 104 0.0 %
Date: 2014-04-14 Functions: 0 17 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             : 
      10             : 
      11             : #include <svl/IndexedStyleSheets.hxx>
      12             : #include <svl/style.hxx>
      13             : 
      14             : #include <stdexcept>
      15             : #include <utility>
      16             : 
      17             : using rtl::OUString;
      18             : 
      19             : namespace svl {
      20             : 
      21           0 : IndexedStyleSheets::IndexedStyleSheets()
      22           0 : {;}
      23             : 
      24             : 
      25             : void
      26           0 : IndexedStyleSheets::Register(const rtl::OUString& name, unsigned pos)
      27             : {
      28           0 :     mPositionsByName.insert(std::make_pair(name, pos));
      29           0 : }
      30             : 
      31             : void
      32           0 : IndexedStyleSheets::Reindex()
      33             : {
      34           0 :     mPositionsByName.clear();
      35           0 :     unsigned i = 0;
      36           0 :     for (VectorType::const_iterator it = mStyleSheets.begin();
      37           0 :                                     it != mStyleSheets.end(); ++it) {
      38           0 :         SfxStyleSheetBase* p = it->get();
      39           0 :         Register(p->GetName(), i);
      40           0 :         ++i;
      41             :     }
      42           0 : }
      43             : 
      44             : unsigned
      45           0 : IndexedStyleSheets::GetNumberOfStyleSheets() const
      46             : {
      47           0 :     return mStyleSheets.size();
      48             : }
      49             : 
      50             : void
      51           0 : IndexedStyleSheets::AddStyleSheet(rtl::Reference< SfxStyleSheetBase > style)
      52             : {
      53           0 :     if (!HasStyleSheet(style)) {
      54           0 :         mStyleSheets.push_back(style);
      55             :         // since we just added an element to the vector, we can safely do -1 as it will always be >= 1
      56           0 :         Register(style->GetName(), mStyleSheets.size()-1);
      57             :     }
      58           0 : }
      59             : 
      60             : bool
      61           0 : IndexedStyleSheets::RemoveStyleSheet(rtl::Reference< SfxStyleSheetBase > style)
      62             : {
      63           0 :     rtl::OUString styleName = style->GetName();
      64           0 :     std::vector<unsigned> positions = FindPositionsByName(styleName);
      65           0 :     bool found = false;
      66           0 :     unsigned stylePosition = 0;
      67           0 :     for (std::vector<unsigned>::const_iterator it = positions.begin();
      68           0 :                                                it != positions.end(); ++it) {
      69           0 :         if (mStyleSheets.at(*it) == style) {
      70           0 :             found = true;
      71           0 :             stylePosition = *it;
      72           0 :             break;
      73             :         }
      74             :     }
      75             : 
      76           0 :     if (found) {
      77           0 :         mStyleSheets.erase(mStyleSheets.begin() + stylePosition);
      78           0 :         Reindex();
      79             :     }
      80           0 :     return found;
      81             : }
      82             : 
      83             : std::vector<unsigned>
      84           0 : IndexedStyleSheets::FindPositionsByName(const rtl::OUString& name) const
      85             : {
      86           0 :     std::vector<unsigned> r;
      87           0 :     std::pair<MapType::const_iterator, MapType::const_iterator> range = mPositionsByName.equal_range(name);
      88           0 :     for (MapType::const_iterator it = range.first; it != range.second; ++it) {
      89           0 :         r.push_back(it->second);
      90             :     }
      91           0 :     return r;
      92             : }
      93             : 
      94             : std::vector<unsigned>
      95           0 : IndexedStyleSheets::FindPositionsByNameAndPredicate(const rtl::OUString& name,
      96             :         StyleSheetPredicate& predicate) const
      97             : {
      98           0 :     std::vector<unsigned> r;
      99           0 :     MapType::const_iterator it = mPositionsByName.find(name);
     100           0 :     for (/**/; it != mPositionsByName.end(); ++it) {
     101           0 :         unsigned pos = it->second;
     102           0 :         SfxStyleSheetBase *ssheet = mStyleSheets.at(pos).get();
     103           0 :         if (predicate.Check(*ssheet)) {
     104           0 :             r.push_back(pos);
     105             :         }
     106             :     }
     107           0 :     return r;
     108             : }
     109             : 
     110             : 
     111             : unsigned
     112           0 : IndexedStyleSheets::GetNumberOfStyleSheetsWithPredicate(StyleSheetPredicate& predicate) const
     113             : {
     114           0 :     unsigned r = 0;
     115           0 :     for (VectorType::const_iterator it = mStyleSheets.begin(); it != mStyleSheets.end(); ++it) {
     116           0 :         const SfxStyleSheetBase *ssheet = it->get();
     117           0 :         if (predicate.Check(*ssheet)) {
     118           0 :             ++r;
     119             :         }
     120             :     }
     121           0 :     return r;
     122             : }
     123             : 
     124             : rtl::Reference<SfxStyleSheetBase>
     125           0 : IndexedStyleSheets::GetNthStyleSheetThatMatchesPredicate(
     126             :         unsigned n,
     127             :         StyleSheetPredicate& predicate,
     128             :         unsigned startAt)
     129             : {
     130           0 :     rtl::Reference<SfxStyleSheetBase> retval;
     131           0 :     unsigned matching = 0;
     132           0 :     for (VectorType::iterator it = mStyleSheets.begin()+startAt; it != mStyleSheets.end(); ++it) {
     133           0 :         SfxStyleSheetBase *ssheet = it->get();
     134           0 :         if (predicate.Check(*ssheet)) {
     135           0 :             if (matching == n) {
     136           0 :                 retval = *it;
     137           0 :                 break;
     138             :             }
     139           0 :             ++matching;
     140             :         }
     141             :     }
     142           0 :     return retval;
     143             : }
     144             : 
     145             : unsigned
     146           0 : IndexedStyleSheets::FindStyleSheetPosition(const SfxStyleSheetBase& style) const
     147             : {
     148           0 :     VectorType::const_iterator it = std::find(mStyleSheets.begin(), mStyleSheets.end(), &style);
     149           0 :     if (it == mStyleSheets.end()) {
     150           0 :         throw std::runtime_error("IndexedStyleSheets::FindStylePosition Looked for style not in index");
     151             :     }
     152           0 :     return std::distance(mStyleSheets.begin(), it);
     153             : }
     154             : 
     155             : void
     156           0 : IndexedStyleSheets::Clear(StyleSheetDisposer& disposer)
     157             : {
     158           0 :     for (VectorType::iterator it = mStyleSheets.begin(); it != mStyleSheets.end(); ++it) {
     159           0 :         disposer.Dispose(*it);
     160             :     }
     161           0 :     mStyleSheets.clear();
     162           0 :     mPositionsByName.clear();
     163           0 : }
     164             : 
     165           0 : IndexedStyleSheets::~IndexedStyleSheets()
     166           0 : {;}
     167             : 
     168             : bool
     169           0 : IndexedStyleSheets::HasStyleSheet(rtl::Reference< SfxStyleSheetBase > style) const
     170             : {
     171           0 :     rtl::OUString styleName = style->GetName();
     172           0 :     std::vector<unsigned> positions = FindPositionsByName(styleName);
     173           0 :     for (std::vector<unsigned>::const_iterator it = positions.begin();
     174           0 :                                                it != positions.end(); ++it) {
     175           0 :         if (mStyleSheets.at(*it) == style) {
     176           0 :             return true;
     177             :         }
     178             :     }
     179           0 :     return false;
     180             : }
     181             : 
     182             : rtl::Reference< SfxStyleSheetBase >
     183           0 : IndexedStyleSheets::GetStyleSheetByPosition(unsigned pos)
     184             : {
     185           0 :     if( pos < mStyleSheets.size() )
     186           0 :         return mStyleSheets.at(pos);
     187           0 :     return NULL;
     188             : }
     189             : 
     190             : void
     191           0 : IndexedStyleSheets::ApplyToAllStyleSheets(StyleSheetCallback& callback) const
     192             : {
     193           0 :     for (VectorType::const_iterator it = mStyleSheets.begin(); it != mStyleSheets.end(); ++it) {
     194           0 :         callback.DoIt(**it);
     195             :     }
     196           0 : }
     197             : 
     198             : std::vector<unsigned>
     199           0 : IndexedStyleSheets::FindPositionsByPredicate(StyleSheetPredicate& predicate) const
     200             : {
     201           0 :     std::vector<unsigned> r;
     202           0 :     for (VectorType::const_iterator it = mStyleSheets.begin(); it != mStyleSheets.end(); ++it) {
     203           0 :         if (predicate.Check(**it)) {
     204           0 :             r.push_back(std::distance(mStyleSheets.begin(), it));
     205             :         }
     206             :     }
     207           0 :     return r;
     208             : }
     209             : 
     210             : } /* namespace svl */
     211             : 
     212             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10