diff options
author | Caolán McNamara <caolanm@redhat.com> | 2019-02-15 12:58:05 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2019-02-15 15:54:39 +0100 |
commit | 36af12e74f4fa20712a3671c1be2a3a4b5a54e7d (patch) | |
tree | 4a342fc225f91d425be05085cb4b80711cea24d4 /svx | |
parent | 03b4d8f486d9ecdfe21a05d6bf65c396a35772f6 (diff) |
weld ScImportOptionsDlg
Change-Id: Ib8ea4726d20f0bd7f40283983fec2d5890fac382
Reviewed-on: https://gerrit.libreoffice.org/67869
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'svx')
-rw-r--r-- | svx/source/dialog/txencbox.cxx | 232 |
1 files changed, 175 insertions, 57 deletions
diff --git a/svx/source/dialog/txencbox.cxx b/svx/source/dialog/txencbox.cxx index 16b2c1d33c1d..44899b9011b1 100644 --- a/svx/source/dialog/txencbox.cxx +++ b/svx/source/dialog/txencbox.cxx @@ -121,63 +121,85 @@ void SvxTextEncodingBox::FillFromTextEncodingTable( } } - -void SvxTextEncodingBox::FillFromDbTextEncodingMap( - bool bExcludeImportSubsets, sal_uInt32 nExcludeInfoFlags ) +namespace { + std::vector<rtl_TextEncoding> FillFromDbTextEncodingMap(bool bExcludeImportSubsets, sal_uInt32 nExcludeInfoFlags) + { + std::vector<rtl_TextEncoding> aRet; #if !HAVE_FEATURE_DBCONNECTIVITY - (void)bExcludeImportSubsets; - (void)nExcludeInfoFlags; + (void)bExcludeImportSubsets; + (void)nExcludeInfoFlags; #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<nCount; j++ ) - { - bool bInsert = true; - rtl_TextEncoding nEnc = rtl_TextEncoding( aEncs[j] ); - if ( nExcludeInfoFlags ) + 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<nCount; j++ ) { - if ( !rtl_getTextEncodingInfo( nEnc, &aInfo ) ) - bInsert = false; - else + bool bInsert = true; + rtl_TextEncoding nEnc = rtl_TextEncoding( aEncs[j] ); + if ( nExcludeInfoFlags ) { - if ( (aInfo.Flags & nExcludeInfoFlags) == 0 ) + if ( !rtl_getTextEncodingInfo( nEnc, &aInfo ) ) + bInsert = false; + else { - if ( (nExcludeInfoFlags & RTL_TEXTENCODING_INFO_UNICODE) && - ((nEnc == RTL_TEXTENCODING_UCS2) || - nEnc == RTL_TEXTENCODING_UCS4) ) - bInsert = false; // InfoFlags don't work for Unicode :-( + 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 + bInsert = false; } - else - bInsert = false; } - } - if ( bInsert ) - { - if ( bExcludeImportSubsets ) + if ( bInsert ) { - switch ( nEnc ) + if ( bExcludeImportSubsets ) { - // subsets of RTL_TEXTENCODING_GB_18030 - case RTL_TEXTENCODING_GB_2312 : - case RTL_TEXTENCODING_GBK : - case RTL_TEXTENCODING_MS_936 : - bInsert = false; - break; + 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; + } } + // CharsetMap offers a RTL_TEXTENCODING_DONTKNOW for internal use, + // makes no sense here and would result in an empty string as list + // entry. + if ( bInsert && nEnc != RTL_TEXTENCODING_DONTKNOW ) + aRet.push_back(nEnc); } - // CharsetMap offers a RTL_TEXTENCODING_DONTKNOW for internal use, - // makes no sense here and would result in an empty string as list - // entry. - if ( bInsert && nEnc != RTL_TEXTENCODING_DONTKNOW ) - InsertTextEncoding( nEnc ); } - } #endif + return aRet; + } } +void TextEncodingBox::FillFromDbTextEncodingMap( + bool bExcludeImportSubsets, sal_uInt32 nExcludeInfoFlags ) +{ + m_xControl->freeze(); + auto aEncs = ::FillFromDbTextEncodingMap(bExcludeImportSubsets, nExcludeInfoFlags); + for (auto nEnc : aEncs) + InsertTextEncoding(nEnc); + m_xControl->thaw(); +} + +void TextEncodingTreeView::FillFromDbTextEncodingMap( + bool bExcludeImportSubsets, sal_uInt32 nExcludeInfoFlags ) +{ + m_xControl->freeze(); + auto aEncs = ::FillFromDbTextEncodingMap(bExcludeImportSubsets, nExcludeInfoFlags); + for (auto nEnc : aEncs) + InsertTextEncoding(nEnc); + m_xControl->thaw(); +} void SvxTextEncodingBox::FillWithMimeAndSelectBest() { @@ -230,33 +252,91 @@ TextEncodingBox::TextEncodingBox(std::unique_ptr<weld::ComboBox> pControl) m_xControl->make_sorted(); } +TextEncodingTreeView::TextEncodingTreeView(std::unique_ptr<weld::TreeView> pControl) + : m_xControl(std::move(pControl)) +{ + m_xControl->make_sorted(); +} + TextEncodingBox::~TextEncodingBox() { } -void TextEncodingBox::FillFromTextEncodingTable( - bool bExcludeImportSubsets ) +TextEncodingTreeView::~TextEncodingTreeView() { - m_xControl->freeze(); - const sal_uInt32 nCount = SAL_N_ELEMENTS(RID_SVXSTR_TEXTENCODING_TABLE); - for (sal_uInt32 j = 0; j < nCount; ++j) +} + +namespace +{ + std::vector<int> FillFromTextEncodingTable(bool bExcludeImportSubsets, sal_uInt32 nExcludeInfoFlags) { - bool bInsert = true; - rtl_TextEncoding nEnc = RID_SVXSTR_TEXTENCODING_TABLE[j].second; - if ( bExcludeImportSubsets ) + std::vector<int> aRet; + + rtl_TextEncodingInfo aInfo; + aInfo.StructSize = sizeof(rtl_TextEncodingInfo); + const sal_uInt32 nCount = SAL_N_ELEMENTS(RID_SVXSTR_TEXTENCODING_TABLE); + for (sal_uInt32 j = 0; j < nCount; ++j) { - switch ( nEnc ) + bool bInsert = true; + rtl_TextEncoding nEnc = RID_SVXSTR_TEXTENCODING_TABLE[j].second; + if ( nExcludeInfoFlags ) { - // subsets of RTL_TEXTENCODING_GB_18030 - case RTL_TEXTENCODING_GB_2312 : - case RTL_TEXTENCODING_GBK : - case RTL_TEXTENCODING_MS_936 : + if ( !rtl_getTextEncodingInfo( nEnc, &aInfo ) ) bInsert = false; - break; + 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 + bInsert = false; + } + } + 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 ) + aRet.push_back(j); } - if ( bInsert ) - InsertTextEncoding(nEnc, SvxResId(RID_SVXSTR_TEXTENCODING_TABLE[j].first)); + return aRet; + } +} + +void TextEncodingBox::FillFromTextEncodingTable( + bool bExcludeImportSubsets, sal_uInt32 nExcludeInfoFlags) +{ + std::vector<int> aRet(::FillFromTextEncodingTable(bExcludeImportSubsets, nExcludeInfoFlags)); + m_xControl->freeze(); + for (auto j : aRet) + { + rtl_TextEncoding nEnc = RID_SVXSTR_TEXTENCODING_TABLE[j].second; + InsertTextEncoding(nEnc, SvxResId(RID_SVXSTR_TEXTENCODING_TABLE[j].first)); + } + m_xControl->thaw(); +} + +void TextEncodingTreeView::FillFromTextEncodingTable( + bool bExcludeImportSubsets, sal_uInt32 nExcludeInfoFlags) +{ + std::vector<int> aRet(::FillFromTextEncodingTable(bExcludeImportSubsets, nExcludeInfoFlags)); + m_xControl->freeze(); + for (auto j : aRet) + { + rtl_TextEncoding nEnc = RID_SVXSTR_TEXTENCODING_TABLE[j].second; + InsertTextEncoding(nEnc, SvxResId(RID_SVXSTR_TEXTENCODING_TABLE[j].first)); } m_xControl->thaw(); } @@ -267,6 +347,30 @@ void TextEncodingBox::InsertTextEncoding( const rtl_TextEncoding nEnc, m_xControl->append(OUString::number(nEnc), rEntry); } +void TextEncodingTreeView::InsertTextEncoding( const rtl_TextEncoding nEnc, + const OUString& rEntry ) +{ + m_xControl->append(OUString::number(nEnc), rEntry); +} + +void TextEncodingBox::InsertTextEncoding( const rtl_TextEncoding nEnc ) +{ + const OUString& rEntry = SvxTextEncodingTable::GetTextString(nEnc); + if (!rEntry.isEmpty()) + InsertTextEncoding( nEnc, rEntry ); + else + SAL_WARN( "svx.dialog", "TextEncodingBox::InsertTextEncoding: no resource string for text encoding: " << static_cast<sal_Int32>( nEnc ) ); +} + +void TextEncodingTreeView::InsertTextEncoding( const rtl_TextEncoding nEnc ) +{ + const OUString& rEntry = SvxTextEncodingTable::GetTextString(nEnc); + if (!rEntry.isEmpty()) + InsertTextEncoding( nEnc, rEntry ); + else + SAL_WARN( "svx.dialog", "TextEncodingTreeView::InsertTextEncoding: no resource string for text encoding: " << static_cast<sal_Int32>( nEnc ) ); +} + rtl_TextEncoding TextEncodingBox::GetSelectTextEncoding() const { OUString sId(m_xControl->get_active_id()); @@ -276,9 +380,23 @@ rtl_TextEncoding TextEncodingBox::GetSelectTextEncoding() const return RTL_TEXTENCODING_DONTKNOW; } +rtl_TextEncoding TextEncodingTreeView::GetSelectTextEncoding() const +{ + OUString sId(m_xControl->get_selected_id()); + if (!sId.isEmpty()) + return rtl_TextEncoding(sId.toInt32()); + else + return RTL_TEXTENCODING_DONTKNOW; +} + void TextEncodingBox::SelectTextEncoding( const rtl_TextEncoding nEnc ) { m_xControl->set_active_id(OUString::number(nEnc)); } +void TextEncodingTreeView::SelectTextEncoding( const rtl_TextEncoding nEnc ) +{ + m_xControl->select_id(OUString::number(nEnc)); +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |