diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=officecfg.vpj officecfg.clean/registry/schema/org/openoffice/Office/Calc.xcs officecfg/registry/schema/org/openoffice/Office/Calc.xcs
--- officecfg.clean/registry/schema/org/openoffice/Office/Calc.xcs 2008-04-28 18:35:57.000000000 -0400
+++ officecfg/registry/schema/org/openoffice/Office/Calc.xcs 2008-04-28 18:36:03.000000000 -0400
@@ -1024,6 +1024,72 @@
NULL
+
+
+ Contains the dialogs settings.
+
+
+
+ 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
+
+
+
+ muthusuba
+ Fixed Width List of separators
+
+
+
+
+
+
Contains settings that affect cell calculation.
diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=sc.vpj sc.clean/source/ui/dbgui/csvruler.cxx sc/source/ui/dbgui/csvruler.cxx
--- sc.clean/source/ui/dbgui/csvruler.cxx 2008-04-28 17:33:09.000000000 -0400
+++ sc/source/ui/dbgui/csvruler.cxx 2008-04-28 19:23:31.000000000 -0400
@@ -48,8 +48,76 @@
#endif
+#include
+#include
+#include
+#include "miscuno.hxx"
+
+using namespace rtl;
+using namespace com::sun::star::uno;
+
+
+
+// ============================================================================
+#define SEP_PATH "Office.Calc/Dialogs/CSVImport"
+#define FIXED_WIDTH_LIST "FixedWidthList"
+
+
// ============================================================================
+static void load_FixedWidthList(ScCsvSplits &aSplits)
+{
+ String sSplits;
+ OUString sFixedWidthLists;
+
+ SequenceaValues;
+ const Any *pProperties;
+ Sequence aNames(1);
+ OUString* pNames = aNames.getArray();
+ ScLinkConfigItem aItem( OUString::createFromAscii( SEP_PATH ) );
+
+ pNames[0] = OUString::createFromAscii( FIXED_WIDTH_LIST );
+ aValues = aItem.GetProperties( aNames );
+ pProperties = aValues.getConstArray();
+
+ if( pProperties[0].hasValue() )
+ {
+ aSplits.Clear();
+ pProperties[0] >>= sFixedWidthLists;
+
+ sSplits = String( sFixedWidthLists );
+
+ // String ends with a semi-colon so there is no 'int' after the last one.
+ for(int i=0;i aValues;
+ Any *pProperties;
+ Sequence aNames(1);
+ OUString* pNames = aNames.getArray();
+ ScLinkConfigItem aItem( OUString::createFromAscii( SEP_PATH ) );
+
+ pNames[0] = OUString::createFromAscii( FIXED_WIDTH_LIST );
+ aValues = aItem.GetProperties( aNames );
+ pProperties = aValues.getArray();
+ pProperties[0] <<= sFixedWidthLists;
+
+ aItem.PutProperties(aNames, aValues);
+}
+
ScCsvRuler::ScCsvRuler( ScCsvControl& rParent ) :
ScCsvControl( rParent ),
mnPosCursorLast( 1 )
@@ -59,6 +127,13 @@ ScCsvRuler::ScCsvRuler( ScCsvControl& rP
InitSizeData();
maBackgrDev.SetFont( GetFont() );
maRulerDev.SetFont( GetFont() );
+
+ load_FixedWidthList( maSplits );
+}
+
+ScCsvRuler::~ScCsvRuler()
+{
+ save_FixedWidthList( maSplits );
}
diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=sc.vpj sc.clean/source/ui/dbgui/scuiasciiopt.cxx sc/source/ui/dbgui/scuiasciiopt.cxx
--- sc.clean/source/ui/dbgui/scuiasciiopt.cxx 2008-04-28 17:33:09.000000000 -0400
+++ sc/source/ui/dbgui/scuiasciiopt.cxx 2008-04-28 19:29:34.000000000 -0400
@@ -56,6 +56,12 @@
// ause
#include "editutil.hxx"
+#include
+#include
+#include
+#include "miscuno.hxx"
+
+
//! TODO make dynamic
#ifdef WIN
const SCSIZE ASCIIDLG_MAXROWS = 10000;
@@ -63,6 +69,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/Dialogs/CSVImport"
+
+
// ============================================================================
void lcl_FillCombo( ComboBox& rCombo, const String& rList, sal_Unicode cSelect )
@@ -110,11 +130,75 @@ 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);
+}
// ----------------------------------------------------------------------------
ScImportAsciiDlg::ScImportAsciiDlg( Window* pParent,String aDatName,
- SvStream* pInStream, sal_Unicode cSep ) :
+ SvStream* pInStream, sal_Unicode /*cSep*/ ) :
ModalDialog ( pParent, ScResId( RID_SCDLG_ASCII ) ),
mpDatStream ( pInStream ),
mnStreamPos( pInStream ? pInStream->Tell() : 0 ),
@@ -158,14 +242,15 @@ ScImportAsciiDlg::ScImportAsciiDlg( Wind
aFldSepList ( ScResId( SCSTR_FIELDSEP ) ),
aTextSepList( ScResId( SCSTR_TEXTSEP ) ),
mcTextSep ( ScAsciiOptions::cDefaultTextSep ),
- maStrTextToColumns( ScResId( STR_TEXTTOCOLUMNS ) )
+ maStrTextToColumns( ScResId( STR_TEXTTOCOLUMNS ) ),
+ mbFileImport(true)
{
FreeResource();
+ mbFileImport = aDatName.Len() > 0;
String aName = GetText();
// aDatName is empty if invoked during paste from clipboard.
- BOOL bClipboard = (aDatName.Len() == 0);
- if (!bClipboard)
+ if (mbFileImport)
{
aName.AppendAscii(RTL_CONSTASCII_STRINGPARAM(" - ["));
aName += aDatName;
@@ -173,20 +258,47 @@ ScImportAsciiDlg::ScImportAsciiDlg( Wind
}
SetText( aName );
- switch(cSep)
+
+ OUString sFieldSeparators;
+ OUString sTextSeparators;
+ bool bMergeDelimiters = false;
+ bool bFixedWidth = false;
+ sal_Int32 nFromRow = 1;
+ sal_Int32 nCharSet = -1;
+ if (mbFileImport)
+ // load separators only when importing csv files.
+ 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 len = maFieldSeparators.Len();
+ for (int i = 0; i < len; ++i)
{
- case '\t': aCkbTab.Check(); break;
- case ';': aCkbSemicolon.Check(); break;
- case ',': aCkbComma.Check(); break;
- case ' ': aCkbSpace.Check(); break;
- default:
- aCkbOther.Check();
- aEdOther.SetText( cSep );
+ switch( aSep[i] )
+ {
+ case '\t': aCkbTab.Check(); break;
+ case ';': aCkbSemicolon.Check(); break;
+ case ',': aCkbComma.Check(); break;
+ case ' ': aCkbSpace.Check(); break;
+ default:
+ aCkbOther.Check();
+ aEdOther.SetText( aEdOther.GetText() + OUString( aSep[i] ) );
+ }
}
+
+ // Get Separators from the dialog
maFieldSeparators = GetSeparators();
// Clipboard is always Unicode, else detect.
- BOOL bPreselectUnicode = bClipboard;
+ bool bPreselectUnicode = !mbFileImport;
// Sniff for Unicode / not
if( !bPreselectUnicode && mpDatStream )
{
@@ -222,6 +334,7 @@ ScImportAsciiDlg::ScImportAsciiDlg( Wind
// *** Separator characters ***
lcl_FillCombo( aCbTextSep, aTextSepList, mcTextSep );
+ aCbTextSep.SetText( sTextSeparators );
Link aSeparatorHdl =LINK( this, ScImportAsciiDlg, SeparatorHdl );
aCbTextSep.SetSelectHdl( aSeparatorHdl );
@@ -242,6 +355,10 @@ ScImportAsciiDlg::ScImportAsciiDlg( Wind
aLbCharSet.InsertTextEncoding( RTL_TEXTENCODING_DONTKNOW, aCharSetUser );
aLbCharSet.SelectTextEncoding( bPreselectUnicode ?
RTL_TEXTENCODING_UNICODE : gsl_getSystemTextEncoding() );
+
+ if( nCharSet >= 0 )
+ aLbCharSet.SelectEntryPos( nCharSet );
+
SetSelectedCharSet();
aLbCharSet.SetSelectHdl( LINK( this, ScImportAsciiDlg, CharSetHdl ) );
@@ -273,6 +390,9 @@ ScImportAsciiDlg::ScImportAsciiDlg( Wind
ScImportAsciiDlg::~ScImportAsciiDlg()
{
+ if (mbFileImport)
+ save_Separators( maFieldSeparators, aCbTextSep.GetText(), aCkbAsOnce.IsChecked(),
+ aRbFixed.IsChecked(), aNfRow.GetValue(), aLbCharSet.GetSelectEntryPos());
delete[] mpRowPosArray;
}
diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=sc.vpj sc.clean/source/ui/inc/csvruler.hxx sc/source/ui/inc/csvruler.hxx
--- sc.clean/source/ui/inc/csvruler.hxx 2008-04-28 17:33:09.000000000 -0400
+++ sc/source/ui/inc/csvruler.hxx 2008-04-28 19:22:57.000000000 -0400
@@ -86,6 +86,7 @@ private:
// ------------------------------------------------------------------------
public:
explicit ScCsvRuler( ScCsvControl& rParent );
+ ~ScCsvRuler();
// common ruler handling --------------------------------------------------
public:
diff -urp --exclude=CVS --exclude=unxlngi6.pro --exclude=sc.vpj sc.clean/source/ui/inc/scuiasciiopt.hxx sc/source/ui/inc/scuiasciiopt.hxx
--- sc.clean/source/ui/inc/scuiasciiopt.hxx 2008-04-28 17:33:09.000000000 -0400
+++ sc/source/ui/inc/scuiasciiopt.hxx 2008-04-28 18:46:52.000000000 -0400
@@ -92,6 +92,7 @@ class ScImportAsciiDlg : public ModalDia
CharSet meCharSet; /// Selected char set.
bool mbCharSetSystem; /// Is System char set selected?
+ bool mbFileImport; /// Is this dialog involked for csv file import ?
public:
ScImportAsciiDlg(