--- officecfg/registry/schema/org/openoffice/Office/Calc.xcs 2005-07-24 17:09:34.000000000 +0530 +++ officecfg/registry/schema/org/openoffice/Office/Calc.xcs 2005-09-07 22:40:51.000000000 +0530 @@ -1041,6 +1041,59 @@ NULL + + + Contains setting for Text CSV Import + + + + muthusuba + Merge Delimiter check box status + + + false + + + + muthusuba + List of Separators - as a String + + + ; + + + + muthusuba + Text Separators + + + " + + + + muthusuba + Fixed width + + + false + + + + muthusuba + From Row + + + 1 + + + + muthusuba + Char Set + + + -1 + + Contains settings that affect cell calculation. --- sc/source/ui/dbgui/scuiasciiopt.cxx 2005-07-24 17:46:45.000000000 +0530 +++ sc/source/ui/dbgui/scuiasciiopt.cxx 2005-09-07 23:00:03.494705192 +0530 @@ -79,6 +79,12 @@ // ause #include "editutil.hxx" +#include +#include +#include +#include "miscuno.hxx" + + //! TODO make dynamic #ifdef WIN const SCSIZE ASCIIDLG_MAXROWS = 10000; @@ -86,6 +92,20 @@ const SCSIZE ASCIIDLG_MAXROWS const SCSIZE ASCIIDLG_MAXROWS = MAXROWCOUNT; #endif + +using namespace rtl; +using namespace com::sun::star::uno; + +// Defines - CSV Import Preserve Options +#define FIXED_WIDTH "FixedWidth" +#define FROM_ROW "FromRow" +#define CHAR_SET "CharSet" +#define SEPARATORS "Separators" +#define TEXT_SEPARATORS "TextSeparators" +#define MERGE_DELIMITERS "MergeDelimiters" +#define SEP_PATH "Office.Calc/CSVImport" + + // ============================================================================ void lcl_FillCombo( ComboBox& rCombo, const String& rList, sal_Unicode cSelect ) @@ -133,6 +153,70 @@ sal_Unicode lcl_CharFromCombo( ComboBox& return c; } +static void load_Separators( OUString &sFieldSeparators, OUString &sTextSeparators, + bool &bMergeDelimiters, bool &bFixedWidth, sal_Int32 &nFromRow, sal_Int32 &nCharSet ) +{ + SequenceaValues; + const Any *pProperties; + Sequence aNames(6); + OUString* pNames = aNames.getArray(); + ScLinkConfigItem aItem( OUString::createFromAscii( SEP_PATH ) ); + + pNames[0] = OUString::createFromAscii( MERGE_DELIMITERS ); + pNames[1] = OUString::createFromAscii( SEPARATORS ); + pNames[2] = OUString::createFromAscii( TEXT_SEPARATORS ); + pNames[3] = OUString::createFromAscii( FIXED_WIDTH ); + pNames[4] = OUString::createFromAscii( FROM_ROW ); + pNames[5] = OUString::createFromAscii( CHAR_SET ); + aValues = aItem.GetProperties( aNames ); + pProperties = aValues.getConstArray(); + if( pProperties[1].hasValue() ) + pProperties[1] >>= sFieldSeparators; + + if( pProperties[2].hasValue() ) + pProperties[2] >>= sTextSeparators; + + if( pProperties[0].hasValue() ) + bMergeDelimiters = ScUnoHelpFunctions::GetBoolFromAny( pProperties[0] ); + + if( pProperties[3].hasValue() ) + bFixedWidth = ScUnoHelpFunctions::GetBoolFromAny( pProperties[3] ); + + if( pProperties[4].hasValue() ) + pProperties[4] >>= nFromRow; + + if( pProperties[5].hasValue() ) + pProperties[5] >>= nCharSet; +} + +static void save_Separators( String maSeparators, String maTxtSep, bool bMergeDelimiters, + bool bFixedWidth, sal_Int32 nFromRow, sal_Int32 nCharSet ) +{ + OUString sFieldSeparators = OUString( maSeparators ); + OUString sTextSeparators = OUString( maTxtSep ); + Sequence aValues; + Any *pProperties; + Sequence aNames(6); + OUString* pNames = aNames.getArray(); + ScLinkConfigItem aItem( OUString::createFromAscii( SEP_PATH ) ); + + pNames[0] = OUString::createFromAscii( MERGE_DELIMITERS ); + pNames[1] = OUString::createFromAscii( SEPARATORS ); + pNames[2] = OUString::createFromAscii( TEXT_SEPARATORS ); + pNames[3] = OUString::createFromAscii( FIXED_WIDTH ); + pNames[4] = OUString::createFromAscii( FROM_ROW ); + pNames[5] = OUString::createFromAscii( CHAR_SET ); + aValues = aItem.GetProperties( aNames ); + pProperties = aValues.getArray(); + pProperties[1] <<= sFieldSeparators; + pProperties[2] <<= sTextSeparators; + ScUnoHelpFunctions::SetBoolInAny( pProperties[0], bMergeDelimiters ); + ScUnoHelpFunctions::SetBoolInAny( pProperties[3], bFixedWidth ); + pProperties[4] <<= nFromRow; + pProperties[5] <<= nCharSet; + + aItem.PutProperties(aNames, aValues); +} // ---------------------------------------------------------------------------- @@ -190,16 +274,42 @@ ScImportAsciiDlg::ScImportAsciiDlg( Wind aName += ']'; SetText( aName ); - switch(cSep) + + OUString sFieldSeparators; + OUString sTextSeparators; + bool bMergeDelimiters = false; + bool bFixedWidth = false; + sal_Int32 nFromRow = 1; + sal_Int32 nCharSet = -1; + load_Separators (sFieldSeparators, sTextSeparators, bMergeDelimiters, bFixedWidth, nFromRow, nCharSet); + maFieldSeparators = String(sFieldSeparators); + + if( bMergeDelimiters ) + aCkbAsOnce.Check(); + if( bFixedWidth ) + aRbFixed.Check(); + if( nFromRow != 1 ) + aNfRow.SetValue( nFromRow ); + + ByteString bString(maFieldSeparators,RTL_TEXTENCODING_MS_1252); + const sal_Char *aSep = bString.GetBuffer(); + int i = 0; + int len = maFieldSeparators.Len(); + for(i=0;i= 0 ) + aLbCharSet.SelectEntryPos( nCharSet ); + // *** column type ListBox *** xub_StrLen nCount = aColumnUser.GetTokenCount(); for (xub_StrLen i=0; i