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 <charsets.hxx>
21 #include <core_resource.hxx>
22 #include <osl/diagnose.h>
23 #include <strings.hrc>
24 #include <rtl/tencinfo.h>
25 #include <svx/txenctab.hxx>
26 
27 namespace dbaui
28 {
29     using namespace ::dbtools;
30 
31     // OCharsetDisplay
OCharsetDisplay()32     OCharsetDisplay::OCharsetDisplay()
33         : OCharsetMap()
34         , m_aSystemDisplayName(DBA_RES( STR_RSC_CHARSETS ))
35     {
36     }
37 
approveEncoding(const rtl_TextEncoding _eEncoding,const rtl_TextEncodingInfo & _rInfo) const38     bool OCharsetDisplay::approveEncoding( const rtl_TextEncoding _eEncoding, const rtl_TextEncodingInfo& _rInfo ) const
39     {
40         if ( !OCharsetMap::approveEncoding( _eEncoding, _rInfo ) )
41             return false;
42 
43         if ( RTL_TEXTENCODING_DONTKNOW == _eEncoding )
44             return true;
45 
46         return !SvxTextEncodingTable::GetTextString(_eEncoding).isEmpty();
47     }
48 
begin() const49     OCharsetDisplay::const_iterator OCharsetDisplay::begin() const
50     {
51         return const_iterator( this, OCharsetMap::begin() );
52     }
53 
end() const54     OCharsetDisplay::const_iterator OCharsetDisplay::end() const
55     {
56         return const_iterator( this, OCharsetMap::end() );
57     }
58 
findEncoding(const rtl_TextEncoding _eEncoding) const59     OCharsetDisplay::const_iterator OCharsetDisplay::findEncoding(const rtl_TextEncoding _eEncoding) const
60     {
61         OCharsetMap::const_iterator aBaseIter = OCharsetMap::find(_eEncoding);
62         return const_iterator( this, aBaseIter );
63     }
64 
findIanaName(const OUString & _rIanaName) const65     OCharsetDisplay::const_iterator OCharsetDisplay::findIanaName(const OUString& _rIanaName) const
66     {
67         OCharsetMap::const_iterator aBaseIter = OCharsetMap::findIanaName(_rIanaName);
68         return const_iterator( this, aBaseIter );
69     }
70 
findDisplayName(const OUString & _rDisplayName) const71     OCharsetDisplay::const_iterator OCharsetDisplay::findDisplayName(const OUString& _rDisplayName) const
72     {
73         rtl_TextEncoding eEncoding = RTL_TEXTENCODING_DONTKNOW;
74         if ( _rDisplayName != m_aSystemDisplayName )
75         {
76             eEncoding = SvxTextEncodingTable::GetTextEncoding(_rDisplayName);
77             OSL_ENSURE( RTL_TEXTENCODING_DONTKNOW != eEncoding,
78                 "OCharsetDisplay::find: non-empty display name, but DONTKNOW!" );
79         }
80         return const_iterator( this, OCharsetMap::find( eEncoding ) );
81     }
82 
83     // CharsetDisplayDerefHelper
CharsetDisplayDerefHelper(const CharsetDisplayDerefHelper & _rSource)84     CharsetDisplayDerefHelper::CharsetDisplayDerefHelper(const CharsetDisplayDerefHelper& _rSource)
85         :CharsetDisplayDerefHelper_Base(_rSource)
86         ,m_sDisplayName(_rSource.m_sDisplayName)
87     {
88     }
89 
CharsetDisplayDerefHelper(const::dbtools::CharsetIteratorDerefHelper & _rBase,const OUString & _rDisplayName)90     CharsetDisplayDerefHelper::CharsetDisplayDerefHelper(const ::dbtools::CharsetIteratorDerefHelper& _rBase, const OUString& _rDisplayName)
91         :CharsetDisplayDerefHelper_Base(_rBase)
92         ,m_sDisplayName(_rDisplayName)
93     {
94         OSL_ENSURE( !m_sDisplayName.isEmpty(), "CharsetDisplayDerefHelper::CharsetDisplayDerefHelper: invalid display name!" );
95     }
96 
97     // OCharsetDisplay::ExtendedCharsetIterator
ExtendedCharsetIterator(const OCharsetDisplay * _pContainer,const base_iterator & _rPosition)98     OCharsetDisplay::ExtendedCharsetIterator::ExtendedCharsetIterator( const OCharsetDisplay* _pContainer, const base_iterator& _rPosition )
99         :m_pContainer(_pContainer)
100         ,m_aPosition(_rPosition)
101     {
102         OSL_ENSURE(m_pContainer, "OCharsetDisplay::ExtendedCharsetIterator::ExtendedCharsetIterator : invalid container!");
103     }
104 
operator *() const105     CharsetDisplayDerefHelper OCharsetDisplay::ExtendedCharsetIterator::operator*() const
106     {
107         OSL_ENSURE( m_aPosition != m_pContainer->OCharsetDisplay_Base::end(), "OCharsetDisplay::ExtendedCharsetIterator::operator* : invalid position!");
108 
109         rtl_TextEncoding eEncoding = (*m_aPosition).getEncoding();
110         return CharsetDisplayDerefHelper(
111             *m_aPosition,
112             RTL_TEXTENCODING_DONTKNOW == eEncoding ? m_pContainer->m_aSystemDisplayName : SvxTextEncodingTable::GetTextString(eEncoding)
113         );
114     }
115 
operator ++()116     const OCharsetDisplay::ExtendedCharsetIterator& OCharsetDisplay::ExtendedCharsetIterator::operator++()
117     {
118         OSL_ENSURE( m_aPosition != m_pContainer->OCharsetDisplay_Base::end(), "OCharsetDisplay::ExtendedCharsetIterator::operator++ : invalid position!");
119         if ( m_aPosition != m_pContainer->OCharsetDisplay_Base::end() )
120             ++m_aPosition;
121         return *this;
122     }
123 
operator ==(const OCharsetDisplay::ExtendedCharsetIterator & lhs,const OCharsetDisplay::ExtendedCharsetIterator & rhs)124     bool operator==(const OCharsetDisplay::ExtendedCharsetIterator& lhs, const OCharsetDisplay::ExtendedCharsetIterator& rhs)
125     {
126         return (lhs.m_pContainer == rhs.m_pContainer) && (lhs.m_aPosition == rhs.m_aPosition);
127     }
128 
129 }   // namespace dbaui
130 
131 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
132