LCOV - code coverage report
Current view: top level - libreoffice/svx/source/dialog - txencbox.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 85 0.0 %
Date: 2012-12-27 Functions: 0 11 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             : 
      21             : #include "svx/txencbox.hxx"
      22             : #include "svx/txenctab.hxx"
      23             : #include <svx/dialogs.hrc>
      24             : #ifndef DISABLE_DBCONNECTIVITY
      25             : #include "svx/dbcharsethelper.hxx"
      26             : #endif
      27             : #include <vcl/svapp.hxx>
      28             : #include <rtl/tencinfo.h>
      29             : #include <rtl/locale.h>
      30             : #include <rtl/strbuf.hxx>
      31             : #include <osl/nlsupport.h>
      32             : 
      33             : //========================================================================
      34             : //  class SvxTextEncodingBox
      35             : //========================================================================
      36             : 
      37           0 : SvxTextEncodingBox::SvxTextEncodingBox( Window* pParent, const ResId& rResId )
      38             :     :
      39           0 :     ListBox( pParent, rResId )
      40             : {
      41           0 :     m_pEncTable = new SvxTextEncodingTable;
      42           0 : }
      43             : 
      44             : //------------------------------------------------------------------------
      45             : 
      46           0 : SvxTextEncodingBox::~SvxTextEncodingBox()
      47             : {
      48           0 :     delete m_pEncTable;
      49           0 : }
      50             : 
      51             : //------------------------------------------------------------------------
      52             : 
      53           0 : sal_uInt16 SvxTextEncodingBox::EncodingToPos_Impl( rtl_TextEncoding nEnc ) const
      54             : {
      55           0 :     sal_uInt16 nCount = GetEntryCount();
      56           0 :     for ( sal_uInt16 i=0; i<nCount; i++ )
      57             :     {
      58           0 :         if ( nEnc == rtl_TextEncoding( (sal_uIntPtr)GetEntryData(i) ) )
      59           0 :             return i;
      60             :     }
      61           0 :     return LISTBOX_ENTRY_NOTFOUND;
      62             : }
      63             : 
      64             : //------------------------------------------------------------------------
      65             : 
      66           0 : void SvxTextEncodingBox::FillFromTextEncodingTable(
      67             :         sal_Bool bExcludeImportSubsets, sal_uInt32 nExcludeInfoFlags,
      68             :         sal_uInt32 nButIncludeInfoFlags )
      69             : {
      70             :     rtl_TextEncodingInfo aInfo;
      71           0 :     aInfo.StructSize = sizeof(rtl_TextEncodingInfo);
      72           0 :     sal_uInt32 nCount = m_pEncTable->Count();
      73           0 :     for ( sal_uInt32 j=0; j<nCount; j++ )
      74             :     {
      75           0 :         sal_Bool bInsert = sal_True;
      76           0 :         rtl_TextEncoding nEnc = rtl_TextEncoding( m_pEncTable->GetValue( j ) );
      77           0 :         if ( nExcludeInfoFlags )
      78             :         {
      79           0 :             if ( !rtl_getTextEncodingInfo( nEnc, &aInfo ) )
      80           0 :                 bInsert = sal_False;
      81             :             else
      82             :             {
      83           0 :                 if ( (aInfo.Flags & nExcludeInfoFlags) == 0 )
      84             :                 {
      85           0 :                     if ( (nExcludeInfoFlags & RTL_TEXTENCODING_INFO_UNICODE) &&
      86             :                             ((nEnc == RTL_TEXTENCODING_UCS2) ||
      87             :                             nEnc == RTL_TEXTENCODING_UCS4) )
      88           0 :                         bInsert = sal_False;    // InfoFlags don't work for Unicode :-(
      89             :                 }
      90           0 :                 else if ( (aInfo.Flags & nButIncludeInfoFlags) == 0 )
      91           0 :                     bInsert = sal_False;
      92             :             }
      93             :         }
      94           0 :         if ( bInsert )
      95             :         {
      96           0 :             if ( bExcludeImportSubsets )
      97             :             {
      98           0 :                 switch ( nEnc )
      99             :                 {
     100             :                     // subsets of RTL_TEXTENCODING_GB_18030
     101             :                     case RTL_TEXTENCODING_GB_2312 :
     102             :                     case RTL_TEXTENCODING_GBK :
     103             :                     case RTL_TEXTENCODING_MS_936 :
     104           0 :                         bInsert = sal_False;
     105           0 :                     break;
     106             :                 }
     107             :             }
     108           0 :             if ( bInsert )
     109           0 :                 InsertTextEncoding( nEnc, m_pEncTable->GetString( j ) );
     110             :         }
     111             :     }
     112           0 : }
     113             : 
     114             : //------------------------------------------------------------------------
     115             : 
     116           0 : void SvxTextEncodingBox::FillFromDbTextEncodingMap(
     117             :         sal_Bool bExcludeImportSubsets, sal_uInt32 nExcludeInfoFlags,
     118             :         sal_uInt32 nButIncludeInfoFlags )
     119             : {
     120             : #ifdef DISABLE_DBCONNECTIVITY
     121             :     (void)bExcludeImportSubsets;
     122             :     (void)nExcludeInfoFlags;
     123             :     (void)nButIncludeInfoFlags;
     124             : #else
     125             :     rtl_TextEncodingInfo aInfo;
     126           0 :     aInfo.StructSize = sizeof(rtl_TextEncodingInfo);
     127           0 :     svxform::ODataAccessCharsetHelper aCSH;
     128           0 :     ::std::vector< rtl_TextEncoding > aEncs;
     129           0 :     sal_Int32 nCount = aCSH.getSupportedTextEncodings( aEncs );
     130           0 :     for ( sal_uInt16 j=0; j<nCount; j++ )
     131             :     {
     132           0 :         sal_Bool bInsert = sal_True;
     133           0 :         rtl_TextEncoding nEnc = rtl_TextEncoding( aEncs[j] );
     134           0 :         if ( nExcludeInfoFlags )
     135             :         {
     136           0 :             if ( !rtl_getTextEncodingInfo( nEnc, &aInfo ) )
     137           0 :                 bInsert = sal_False;
     138             :             else
     139             :             {
     140           0 :                 if ( (aInfo.Flags & nExcludeInfoFlags) == 0 )
     141             :                 {
     142           0 :                     if ( (nExcludeInfoFlags & RTL_TEXTENCODING_INFO_UNICODE) &&
     143             :                             ((nEnc == RTL_TEXTENCODING_UCS2) ||
     144             :                             nEnc == RTL_TEXTENCODING_UCS4) )
     145           0 :                         bInsert = sal_False;    // InfoFlags don't work for Unicode :-(
     146             :                 }
     147           0 :                 else if ( (aInfo.Flags & nButIncludeInfoFlags) == 0 )
     148           0 :                     bInsert = sal_False;
     149             :             }
     150             :         }
     151           0 :         if ( bInsert )
     152             :         {
     153           0 :             if ( bExcludeImportSubsets )
     154             :             {
     155           0 :                 switch ( nEnc )
     156             :                 {
     157             :                     // subsets of RTL_TEXTENCODING_GB_18030
     158             :                     case RTL_TEXTENCODING_GB_2312 :
     159             :                     case RTL_TEXTENCODING_GBK :
     160             :                     case RTL_TEXTENCODING_MS_936 :
     161           0 :                         bInsert = sal_False;
     162           0 :                     break;
     163             :                 }
     164             :             }
     165             :             // CharsetMap offers a RTL_TEXTENCODING_DONTKNOW for internal use,
     166             :             // makes no sense here and would result in an empty string as list
     167             :             // entry.
     168           0 :             if ( bInsert && nEnc != RTL_TEXTENCODING_DONTKNOW )
     169           0 :                 InsertTextEncoding( nEnc );
     170             :         }
     171           0 :     }
     172             : #endif
     173           0 : }
     174             : 
     175             : //------------------------------------------------------------------------
     176             : 
     177           0 : void SvxTextEncodingBox::FillWithMimeAndSelectBest()
     178             : {
     179           0 :     FillFromTextEncodingTable( sal_False, 0xffffffff, RTL_TEXTENCODING_INFO_MIME );
     180           0 :     rtl_TextEncoding nEnc = SvtSysLocale::GetBestMimeEncoding();
     181           0 :     SelectTextEncoding( nEnc );
     182           0 : }
     183             : 
     184             : //------------------------------------------------------------------------
     185             : 
     186           0 : void SvxTextEncodingBox::InsertTextEncoding( const rtl_TextEncoding nEnc,
     187             :             const String& rEntry, sal_uInt16 nPos )
     188             : {
     189           0 :     sal_uInt16 nAt = InsertEntry( rEntry, nPos );
     190           0 :     SetEntryData( nAt, (void*)(sal_uIntPtr)nEnc );
     191           0 : }
     192             : 
     193             : //------------------------------------------------------------------------
     194             : 
     195           0 : void SvxTextEncodingBox::InsertTextEncoding( const rtl_TextEncoding nEnc, sal_uInt16 nPos )
     196             : {
     197           0 :     const String& rEntry = m_pEncTable->GetTextString( nEnc );
     198           0 :     if ( rEntry.Len() )
     199           0 :         InsertTextEncoding( nEnc, rEntry, nPos );
     200             :     else
     201           0 :         SAL_WARN( "svx.dialog", "SvxTextEncodingBox::InsertTextEncoding: no resource string for text encoding: " << static_cast<sal_Int32>( nEnc ) );
     202           0 : }
     203             : 
     204             : //------------------------------------------------------------------------
     205             : 
     206           0 : rtl_TextEncoding SvxTextEncodingBox::GetSelectTextEncoding() const
     207             : {
     208           0 :     sal_uInt16 nPos = GetSelectEntryPos();
     209             : 
     210           0 :     if ( nPos != LISTBOX_ENTRY_NOTFOUND )
     211           0 :         return rtl_TextEncoding( (sal_uIntPtr)GetEntryData(nPos) );
     212             :     else
     213           0 :         return RTL_TEXTENCODING_DONTKNOW;
     214             : }
     215             : 
     216             : //------------------------------------------------------------------------
     217             : 
     218           0 : void SvxTextEncodingBox::SelectTextEncoding( const rtl_TextEncoding nEnc, sal_Bool bSelect )
     219             : {
     220           0 :     sal_uInt16 nAt = EncodingToPos_Impl( nEnc );
     221             : 
     222           0 :     if ( nAt != LISTBOX_ENTRY_NOTFOUND )
     223           0 :         SelectEntryPos( nAt, bSelect );
     224           0 : }
     225             : 
     226             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10