/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This file incorporates work covered by the following license notice: * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed * with this work for additional information regarding copyright * ownership. The ASF licenses this file to you under the Apache * License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ #include #include "svx/txencbox.hxx" #include "svx/txenctab.hxx" #include #if HAVE_FEATURE_DBCONNECTIVITY #include "svx/dbcharsethelper.hxx" #endif #include #include #include #include #include #include #include SvxTextEncodingBox::SvxTextEncodingBox( vcl::Window* pParent, WinBits nBits ) : ListBox( pParent, nBits ) { m_pEncTable = new SvxTextEncodingTable; } VCL_BUILDER_DECL_FACTORY(SvxTextEncodingBox) { WinBits nWinBits = WB_LEFT|WB_VCENTER|WB_3DLOOK|WB_SIMPLEMODE; bool bDropdown = VclBuilder::extractDropdown(rMap); if (bDropdown) nWinBits |= WB_DROPDOWN; OString sBorder = VclBuilder::extractCustomProperty(rMap); if (!sBorder.isEmpty()) nWinBits |= WB_BORDER; VclPtrInstance pListBox(pParent, nWinBits); if (bDropdown) pListBox->EnableAutoSize(true); rRet = pListBox; } SvxTextEncodingBox::~SvxTextEncodingBox() { disposeOnce(); } void SvxTextEncodingBox::dispose() { delete m_pEncTable; ListBox::dispose(); } sal_Int32 SvxTextEncodingBox::EncodingToPos_Impl( rtl_TextEncoding nEnc ) const { sal_Int32 nCount = GetEntryCount(); for ( sal_Int32 i=0; i(GetEntryData(i)) ) ) return i; } return LISTBOX_ENTRY_NOTFOUND; } void SvxTextEncodingBox::FillFromTextEncodingTable( bool bExcludeImportSubsets, sal_uInt32 nExcludeInfoFlags, sal_uInt32 nButIncludeInfoFlags ) { rtl_TextEncodingInfo aInfo; aInfo.StructSize = sizeof(rtl_TextEncodingInfo); sal_uInt32 nCount = m_pEncTable->Count(); for ( sal_uInt32 j=0; jGetValue( j ) ); if ( nExcludeInfoFlags ) { if ( !rtl_getTextEncodingInfo( nEnc, &aInfo ) ) bInsert = false; else { if ( (aInfo.Flags & nExcludeInfoFlags) == 0 ) { if ( (nExcludeInfoFlags & RTL_TEXTENCODING_INFO_UNICODE) && ((nEnc == RTL_TEXTENCODING_UCS2) || nEnc == RTL_TEXTENCODING_UCS4) ) bInsert = false; // InfoFlags don't work for Unicode :-( } else if ( (aInfo.Flags & nButIncludeInfoFlags) == 0 ) bInsert = false; } } if ( bInsert ) { if ( bExcludeImportSubsets ) { switch ( nEnc ) { // subsets of RTL_TEXTENCODING_GB_18030 case RTL_TEXTENCODING_GB_2312 : case RTL_TEXTENCODING_GBK : case RTL_TEXTENCODING_MS_936 : bInsert = false; break; } } if ( bInsert ) InsertTextEncoding( nEnc, m_pEncTable->GetString( j ) ); } } } void SvxTextEncodingBox::FillFromDbTextEncodingMap( bool bExcludeImportSubsets, sal_uInt32 nExcludeInfoFlags ) { #if !HAVE_FEATURE_DBCONNECTIVITY (void)bExcludeImportSubsets; (void)nExcludeInfoFlags; (void)nButIncludeInfoFlags; #else rtl_TextEncodingInfo aInfo; aInfo.StructSize = sizeof(rtl_TextEncodingInfo); ::std::vector< rtl_TextEncoding > aEncs; sal_Int32 nCount = svxform::charset_helper::getSupportedTextEncodings( aEncs ); for ( sal_Int32 j=0; j(nEnc) ); } void SvxTextEncodingBox::InsertTextEncoding( const rtl_TextEncoding nEnc ) { const OUString& rEntry = m_pEncTable->GetTextString( nEnc ); if ( !rEntry.isEmpty() ) InsertTextEncoding( nEnc, rEntry ); else SAL_WARN( "svx.dialog", "SvxTextEncodingBox::InsertTextEncoding: no resource string for text encoding: " << static_cast( nEnc ) ); } rtl_TextEncoding SvxTextEncodingBox::GetSelectTextEncoding() const { sal_Int32 nPos = GetSelectEntryPos(); if ( nPos != LISTBOX_ENTRY_NOTFOUND ) return rtl_TextEncoding( reinterpret_cast(GetEntryData(nPos)) ); else return RTL_TEXTENCODING_DONTKNOW; } void SvxTextEncodingBox::SelectTextEncoding( const rtl_TextEncoding nEnc ) { sal_Int32 nAt = EncodingToPos_Impl( nEnc ); if ( nAt != LISTBOX_ENTRY_NOTFOUND ) SelectEntryPos( nAt ); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */