1*efeef26fSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*efeef26fSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*efeef26fSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*efeef26fSAndrew Rist * distributed with this work for additional information 6*efeef26fSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*efeef26fSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*efeef26fSAndrew Rist * "License"); you may not use this file except in compliance 9*efeef26fSAndrew Rist * with the License. You may obtain a copy of the License at 10*efeef26fSAndrew Rist * 11*efeef26fSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*efeef26fSAndrew Rist * 13*efeef26fSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*efeef26fSAndrew Rist * software distributed under the License is distributed on an 15*efeef26fSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*efeef26fSAndrew Rist * KIND, either express or implied. See the License for the 17*efeef26fSAndrew Rist * specific language governing permissions and limitations 18*efeef26fSAndrew Rist * under the License. 19*efeef26fSAndrew Rist * 20*efeef26fSAndrew Rist *************************************************************/ 21*efeef26fSAndrew Rist 22*efeef26fSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_sw.hxx" 26cdf0e10cSrcweir #ifdef SW_DLLIMPLEMENTATION 27cdf0e10cSrcweir #undef SW_DLLIMPLEMENTATION 28cdf0e10cSrcweir #endif 29cdf0e10cSrcweir 30cdf0e10cSrcweir #include "dbinsdlg.hxx" 31cdf0e10cSrcweir 32cdf0e10cSrcweir #include <memory> 33cdf0e10cSrcweir 34cdf0e10cSrcweir #include <float.h> 35cdf0e10cSrcweir 36cdf0e10cSrcweir #include <hintids.hxx> 37cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp> 38cdf0e10cSrcweir #include <com/sun/star/container/XNameAccess.hpp> 39cdf0e10cSrcweir #include <com/sun/star/sdbc/XDataSource.hpp> 40cdf0e10cSrcweir #include <com/sun/star/sdbc/XRow.hpp> 41cdf0e10cSrcweir #include <com/sun/star/sdbcx/XTablesSupplier.hpp> 42cdf0e10cSrcweir #include <com/sun/star/sdbcx/XColumnsSupplier.hpp> 43cdf0e10cSrcweir #include <com/sun/star/sdb/XQueriesSupplier.hpp> 44cdf0e10cSrcweir #include <com/sun/star/sdb/CommandType.hpp> 45cdf0e10cSrcweir #include <com/sun/star/sdb/XColumn.hpp> 46cdf0e10cSrcweir #include <com/sun/star/sdb/XDatabaseAccess.hpp> 47cdf0e10cSrcweir #include <com/sun/star/sdbc/DataType.hpp> 48cdf0e10cSrcweir #include <com/sun/star/sdbc/ResultSetType.hpp> 49cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp> 50cdf0e10cSrcweir #include <com/sun/star/util/XNumberFormatter.hpp> 51cdf0e10cSrcweir #include <com/sun/star/util/XNumberFormatTypes.hpp> 52cdf0e10cSrcweir #include <com/sun/star/sdbc/XRowSet.hpp> 53cdf0e10cSrcweir #include <comphelper/processfactory.hxx> 54cdf0e10cSrcweir #include <editeng/langitem.hxx> 55cdf0e10cSrcweir #include <svl/numuno.hxx> 56cdf0e10cSrcweir #include <svl/stritem.hxx> 57cdf0e10cSrcweir #include <vcl/msgbox.hxx> 58cdf0e10cSrcweir #include <vcl/svapp.hxx> 59cdf0e10cSrcweir #include <vcl/mnemonic.hxx> 60cdf0e10cSrcweir #include <svl/style.hxx> 61cdf0e10cSrcweir #include <svl/zformat.hxx> 62cdf0e10cSrcweir #include <svx/htmlmode.hxx> 63cdf0e10cSrcweir #include <editeng/unolingu.hxx> 64cdf0e10cSrcweir #include <sfx2/app.hxx> 65cdf0e10cSrcweir #include <svl/itemset.hxx> 66cdf0e10cSrcweir #include <editeng/brshitem.hxx> 67cdf0e10cSrcweir #include <editeng/boxitem.hxx> 68cdf0e10cSrcweir #include <svx/rulritem.hxx> 69cdf0e10cSrcweir #include <swdbtoolsclient.hxx> 70cdf0e10cSrcweir #include <tabledlg.hxx> 71cdf0e10cSrcweir #include <fmtclds.hxx> 72cdf0e10cSrcweir #include <tabcol.hxx> 73cdf0e10cSrcweir #include <uiitems.hxx> 74cdf0e10cSrcweir #include <viewopt.hxx> 75cdf0e10cSrcweir #include <uitool.hxx> 76cdf0e10cSrcweir #include <wrtsh.hxx> 77cdf0e10cSrcweir #include <wview.hxx> 78cdf0e10cSrcweir #include <docsh.hxx> 79cdf0e10cSrcweir #include <dbmgr.hxx> 80cdf0e10cSrcweir #include <tblafmt.hxx> 81cdf0e10cSrcweir #include <cellatr.hxx> 82cdf0e10cSrcweir #include <swtable.hxx> 83cdf0e10cSrcweir #include <dbfld.hxx> 84cdf0e10cSrcweir #include <fmtcol.hxx> 85cdf0e10cSrcweir #include <section.hxx> 86cdf0e10cSrcweir #include <swwait.hxx> 87cdf0e10cSrcweir #include <modcfg.hxx> 88cdf0e10cSrcweir #include <swmodule.hxx> 89cdf0e10cSrcweir #include <poolfmt.hxx> 90cdf0e10cSrcweir #include <crsskip.hxx> 91cdf0e10cSrcweir 92cdf0e10cSrcweir #include <dbinsdlg.hrc> 93cdf0e10cSrcweir #include <dbui.hrc> 94cdf0e10cSrcweir 95cdf0e10cSrcweir #include <cmdid.h> 96cdf0e10cSrcweir #include <helpid.h> 97cdf0e10cSrcweir #include <cfgid.h> 98cdf0e10cSrcweir #include <SwStyleNameMapper.hxx> 99cdf0e10cSrcweir #include <comphelper/uno3.hxx> 100cdf0e10cSrcweir #include "tabsh.hxx" 101cdf0e10cSrcweir #include "swabstdlg.hxx" 102cdf0e10cSrcweir #include "table.hrc" 103cdf0e10cSrcweir #include <unomid.h> 104cdf0e10cSrcweir #include <IDocumentMarkAccess.hxx> 105cdf0e10cSrcweir 106cdf0e10cSrcweir 107cdf0e10cSrcweir namespace swui 108cdf0e10cSrcweir { 109cdf0e10cSrcweir SwAbstractDialogFactory * GetFactory(); 110cdf0e10cSrcweir } 111cdf0e10cSrcweir 112cdf0e10cSrcweir using namespace ::com::sun::star; 113cdf0e10cSrcweir using namespace ::com::sun::star::uno; 114cdf0e10cSrcweir using namespace ::com::sun::star::container; 115cdf0e10cSrcweir using namespace ::com::sun::star::lang; 116cdf0e10cSrcweir using namespace ::com::sun::star::sdb; 117cdf0e10cSrcweir using namespace ::com::sun::star::sdbc; 118cdf0e10cSrcweir using namespace ::com::sun::star::sdbcx; 119cdf0e10cSrcweir using namespace ::com::sun::star::beans; 120cdf0e10cSrcweir 121cdf0e10cSrcweir // tblafmt.hxx 122cdf0e10cSrcweir SV_IMPL_PTRARR( _SwTableAutoFmtTbl, SwTableAutoFmt* ) 123cdf0e10cSrcweir 124cdf0e10cSrcweir const char cDBFldStart = '<'; 125cdf0e10cSrcweir const char cDBFldEnd = '>'; 126cdf0e10cSrcweir 127cdf0e10cSrcweir // Hilfsstruktur fuers einfuegen von Datenbankspalten als Felder oder Text 128cdf0e10cSrcweir struct _DB_Column 129cdf0e10cSrcweir { 130cdf0e10cSrcweir enum ColType { DB_FILLTEXT, DB_COL_FIELD, DB_COL_TEXT, DB_SPLITPARA } eColType; 131cdf0e10cSrcweir 132cdf0e10cSrcweir union { 133cdf0e10cSrcweir String* pText; 134cdf0e10cSrcweir SwField* pField; 135cdf0e10cSrcweir sal_uLong nFormat; 136cdf0e10cSrcweir } DB_ColumnData; 137cdf0e10cSrcweir const SwInsDBColumn* pColInfo; 138cdf0e10cSrcweir 139cdf0e10cSrcweir _DB_Column() 140cdf0e10cSrcweir { 141cdf0e10cSrcweir pColInfo = 0; 142cdf0e10cSrcweir DB_ColumnData.pText = 0; 143cdf0e10cSrcweir eColType = DB_SPLITPARA; 144cdf0e10cSrcweir } 145cdf0e10cSrcweir 146cdf0e10cSrcweir _DB_Column( const String& rTxt ) 147cdf0e10cSrcweir { 148cdf0e10cSrcweir pColInfo = 0; 149cdf0e10cSrcweir DB_ColumnData.pText = new String( rTxt ); 150cdf0e10cSrcweir eColType = DB_FILLTEXT; 151cdf0e10cSrcweir } 152cdf0e10cSrcweir 153cdf0e10cSrcweir _DB_Column( const SwInsDBColumn& rInfo, sal_uLong nFormat ) 154cdf0e10cSrcweir { 155cdf0e10cSrcweir pColInfo = &rInfo; 156cdf0e10cSrcweir DB_ColumnData.nFormat = nFormat; 157cdf0e10cSrcweir eColType = DB_COL_TEXT; 158cdf0e10cSrcweir } 159cdf0e10cSrcweir 160cdf0e10cSrcweir _DB_Column( const SwInsDBColumn& rInfo, SwDBField& rFld ) 161cdf0e10cSrcweir { 162cdf0e10cSrcweir pColInfo = &rInfo; 163cdf0e10cSrcweir DB_ColumnData.pField = &rFld; 164cdf0e10cSrcweir eColType = DB_COL_FIELD; 165cdf0e10cSrcweir } 166cdf0e10cSrcweir 167cdf0e10cSrcweir ~_DB_Column() 168cdf0e10cSrcweir { 169cdf0e10cSrcweir if( DB_COL_FIELD == eColType ) 170cdf0e10cSrcweir delete DB_ColumnData.pField; 171cdf0e10cSrcweir else if( DB_FILLTEXT == eColType ) 172cdf0e10cSrcweir delete DB_ColumnData.pText; 173cdf0e10cSrcweir } 174cdf0e10cSrcweir }; 175cdf0e10cSrcweir 176cdf0e10cSrcweir typedef _DB_Column* _DB_ColumnPtr; 177cdf0e10cSrcweir SV_DECL_PTRARR_DEL( _DB_Columns, _DB_ColumnPtr, 32, 32 ) 178cdf0e10cSrcweir SV_IMPL_PTRARR( _DB_Columns, _DB_ColumnPtr ) 179cdf0e10cSrcweir 180cdf0e10cSrcweir SV_IMPL_OP_PTRARR_SORT( SwInsDBColumns, SwInsDBColumnPtr ) 181cdf0e10cSrcweir 182cdf0e10cSrcweir /* */ 183cdf0e10cSrcweir 184cdf0e10cSrcweir #define DBCOLUMN_CONFIG_VERSION1 1 185cdf0e10cSrcweir #define DBCOLUMN_CONFIG_VERSION DBCOLUMN_CONFIG_VERSION1 186cdf0e10cSrcweir #define DBCOLUMN_MAXDATA 5 187cdf0e10cSrcweir 188cdf0e10cSrcweir struct _DB_ColumnConfigData 189cdf0e10cSrcweir { 190cdf0e10cSrcweir SwInsDBColumns aDBColumns; 191cdf0e10cSrcweir rtl::OUString sSource, sTable, sEdit, sTblList, sTmplNm, sTAutoFmtNm; 192cdf0e10cSrcweir sal_Bool bIsTable : 1, 193cdf0e10cSrcweir bIsField : 1, 194cdf0e10cSrcweir bIsHeadlineOn : 1, 195cdf0e10cSrcweir bIsEmptyHeadln : 1; 196cdf0e10cSrcweir 197cdf0e10cSrcweir _DB_ColumnConfigData() 198cdf0e10cSrcweir { 199cdf0e10cSrcweir bIsTable = bIsHeadlineOn = sal_True; 200cdf0e10cSrcweir bIsField = bIsEmptyHeadln = sal_False; 201cdf0e10cSrcweir } 202cdf0e10cSrcweir 203cdf0e10cSrcweir ~_DB_ColumnConfigData(); 204cdf0e10cSrcweir private: 205cdf0e10cSrcweir _DB_ColumnConfigData( const _DB_ColumnConfigData& ); 206cdf0e10cSrcweir _DB_ColumnConfigData& operator =( const _DB_ColumnConfigData& ); 207cdf0e10cSrcweir }; 208cdf0e10cSrcweir 209cdf0e10cSrcweir /* */ 210cdf0e10cSrcweir 211cdf0e10cSrcweir int SwInsDBColumn::operator<( const SwInsDBColumn& rCmp ) const 212cdf0e10cSrcweir { 213cdf0e10cSrcweir return 0 > GetAppCollator().compareString( sColumn, rCmp.sColumn ); 214cdf0e10cSrcweir } 215cdf0e10cSrcweir /* --------------------------------------------------------------------------- 216cdf0e10cSrcweir 217cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 218cdf0e10cSrcweir SwInsertDBColAutoPilot::SwInsertDBColAutoPilot( SwView& rView, 219cdf0e10cSrcweir Reference<XDataSource> xDataSource, 220cdf0e10cSrcweir Reference<sdbcx::XColumnsSupplier> xColSupp, 221cdf0e10cSrcweir const SwDBData& rData ) 222cdf0e10cSrcweir : SfxModalDialog( rView.GetWindow(), SW_RES( DLG_AP_INSERT_DB_SEL )), 223cdf0e10cSrcweir ConfigItem(C2U("Office.Writer/InsertData/DataSet"), CONFIG_MODE_DELAYED_UPDATE), 224cdf0e10cSrcweir aFtInsertData( this, SW_RES( FT_INSERT_DATA )), 225cdf0e10cSrcweir aRbAsTable( this, SW_RES( RB_AS_TABLE )), 226cdf0e10cSrcweir aRbAsField( this, SW_RES( RB_AS_FIELD )), 227cdf0e10cSrcweir aRbAsText( this, SW_RES( RB_AS_TEXT )), 228cdf0e10cSrcweir 229cdf0e10cSrcweir aFlHead( this, SW_RES( FL_HEAD )), 230cdf0e10cSrcweir aFtDbColumn( this, SW_RES( FT_DB_COLUMN )), 231cdf0e10cSrcweir 232cdf0e10cSrcweir aLbTblDbColumn( this, SW_RES( LB_TBL_DB_COLUMN )), 233cdf0e10cSrcweir aLbTxtDbColumn( this, SW_RES( LB_TXT_DB_COLUMN )), 234cdf0e10cSrcweir 235cdf0e10cSrcweir aFlFormat( this, SW_RES( FL_FORMAT )), 236cdf0e10cSrcweir aRbDbFmtFromDb( this, SW_RES( RB_DBFMT_FROM_DB )), 237cdf0e10cSrcweir aRbDbFmtFromUsr( this, SW_RES( RB_DBFMT_FROM_USR )), 238cdf0e10cSrcweir aLbDbFmtFromUsr( this, &rView, SW_RES( LB_DBFMT_FROM_USR )), 239cdf0e10cSrcweir 240cdf0e10cSrcweir aIbDbcolToEdit( this, SW_RES( IB_DBCOL_TOEDIT )), 241cdf0e10cSrcweir aEdDbText( this, SW_RES( ED_DB_TEXT )), 242cdf0e10cSrcweir aFtDbParaColl( this, SW_RES( FT_DB_PARA_COLL )), 243cdf0e10cSrcweir aLbDbParaColl( this, SW_RES( LB_DB_PARA_COLL )), 244cdf0e10cSrcweir 245cdf0e10cSrcweir aIbDbcolAllTo( this, SW_RES( IB_DBCOL_ALL_TO )), 246cdf0e10cSrcweir aIbDbcolOneTo( this, SW_RES( IB_DBCOL_ONE_TO )), 247cdf0e10cSrcweir aIbDbcolOneFrom( this, SW_RES( IB_DBCOL_ONE_FROM )), 248cdf0e10cSrcweir aIbDbcolAllFrom( this, SW_RES( IB_DBCOL_ALL_FROM )), 249cdf0e10cSrcweir aFtTableCol( this, SW_RES( FT_TABLE_COL )), 250cdf0e10cSrcweir aLbTableCol( this, SW_RES( LB_TABLE_COL )), 251cdf0e10cSrcweir aCbTableHeadon( this, SW_RES( CB_TABLE_HEADON )), 252cdf0e10cSrcweir aRbHeadlColnms( this, SW_RES( RB_HEADL_COLNMS )), 253cdf0e10cSrcweir aRbHeadlEmpty( this, SW_RES( RB_HEADL_EMPTY )), 254cdf0e10cSrcweir aPbTblFormat( this, SW_RES( PB_TBL_FORMAT )), 255cdf0e10cSrcweir aPbTblAutofmt( this, SW_RES( PB_TBL_AUTOFMT )), 256cdf0e10cSrcweir 257cdf0e10cSrcweir aBtOk( this, SW_RES( BT_OK )), 258cdf0e10cSrcweir aBtCancel( this, SW_RES( BT_CANCEL )), 259cdf0e10cSrcweir aBtHelp( this, SW_RES( BT_HELP )), 260cdf0e10cSrcweir 261cdf0e10cSrcweir aFlBottom( this, SW_RES( FL_BOTTOM )), 262cdf0e10cSrcweir 263cdf0e10cSrcweir aDBData(rData), 264cdf0e10cSrcweir 265cdf0e10cSrcweir aOldNumFmtLnk( aLbDbFmtFromUsr.GetSelectHdl() ), 266cdf0e10cSrcweir sNoTmpl( SW_RES( STR_NOTEMPL )), 267cdf0e10cSrcweir pView( &rView ), 268cdf0e10cSrcweir pTAutoFmt( 0 ), 269cdf0e10cSrcweir pTblSet( 0 ), 270cdf0e10cSrcweir pRep( 0 ) 271cdf0e10cSrcweir { 272cdf0e10cSrcweir FreeResource(); 273cdf0e10cSrcweir 274cdf0e10cSrcweir nGBFmtLen = aFlFormat.GetText().Len(); 275cdf0e10cSrcweir 276cdf0e10cSrcweir if(xColSupp.is()) 277cdf0e10cSrcweir { 278cdf0e10cSrcweir SwWrtShell& rSh = pView->GetWrtShell(); 279cdf0e10cSrcweir Locale aDocLocale( SvxCreateLocale( rSh.GetCurLang() )); 280cdf0e10cSrcweir SvNumberFormatter* pNumFmtr = rSh.GetNumberFormatter(); 281cdf0e10cSrcweir SvNumberFormatsSupplierObj* pNumFmt = new SvNumberFormatsSupplierObj( pNumFmtr ); 282cdf0e10cSrcweir Reference< util::XNumberFormatsSupplier > xDocNumFmtsSupplier = pNumFmt; 283cdf0e10cSrcweir Reference< util::XNumberFormats > xDocNumberFormats = xDocNumFmtsSupplier->getNumberFormats(); 284cdf0e10cSrcweir Reference< util::XNumberFormatTypes > xDocNumberFormatTypes(xDocNumberFormats, UNO_QUERY); 285cdf0e10cSrcweir 286cdf0e10cSrcweir Reference<XPropertySet> xSourceProps(xDataSource, UNO_QUERY); 287cdf0e10cSrcweir Reference< util::XNumberFormats > xNumberFormats; 288cdf0e10cSrcweir if(xSourceProps.is()) 289cdf0e10cSrcweir { 290cdf0e10cSrcweir Any aFormats = xSourceProps->getPropertyValue(C2U("NumberFormatsSupplier")); 291cdf0e10cSrcweir if(aFormats.hasValue()) 292cdf0e10cSrcweir { 293cdf0e10cSrcweir Reference< util::XNumberFormatsSupplier> xSuppl; 294cdf0e10cSrcweir aFormats >>= xSuppl; 295cdf0e10cSrcweir if(xSuppl.is()) 296cdf0e10cSrcweir { 297cdf0e10cSrcweir xNumberFormats = xSuppl->getNumberFormats( ); 298cdf0e10cSrcweir } 299cdf0e10cSrcweir } 300cdf0e10cSrcweir } 301cdf0e10cSrcweir Reference <XNameAccess> xCols = xColSupp->getColumns(); 302cdf0e10cSrcweir Sequence<rtl::OUString> aColNames = xCols->getElementNames(); 303cdf0e10cSrcweir const rtl::OUString* pColNames = aColNames.getConstArray(); 304cdf0e10cSrcweir long nCount = aColNames.getLength(); 305cdf0e10cSrcweir for (long n = 0; n < nCount; n++) 306cdf0e10cSrcweir { 307cdf0e10cSrcweir SwInsDBColumn* pNew = new SwInsDBColumn( pColNames[n], (sal_uInt16)n ); 308cdf0e10cSrcweir Any aCol = xCols->getByName(pColNames[n]); 309cdf0e10cSrcweir Reference <XPropertySet> xCol; 310cdf0e10cSrcweir aCol >>= xCol; 311cdf0e10cSrcweir Any aType = xCol->getPropertyValue(C2S("Type")); 312cdf0e10cSrcweir sal_Int32 eDataType = 0; 313cdf0e10cSrcweir aType >>= eDataType; 314cdf0e10cSrcweir switch(eDataType) 315cdf0e10cSrcweir { 316cdf0e10cSrcweir case DataType::BIT: 317cdf0e10cSrcweir case DataType::BOOLEAN: 318cdf0e10cSrcweir case DataType::TINYINT: 319cdf0e10cSrcweir case DataType::SMALLINT: 320cdf0e10cSrcweir case DataType::INTEGER: 321cdf0e10cSrcweir case DataType::BIGINT: 322cdf0e10cSrcweir case DataType::FLOAT: 323cdf0e10cSrcweir case DataType::REAL: 324cdf0e10cSrcweir case DataType::DOUBLE: 325cdf0e10cSrcweir case DataType::NUMERIC: 326cdf0e10cSrcweir case DataType::DECIMAL: 327cdf0e10cSrcweir case DataType::DATE: 328cdf0e10cSrcweir case DataType::TIME: 329cdf0e10cSrcweir case DataType::TIMESTAMP: 330cdf0e10cSrcweir { 331cdf0e10cSrcweir pNew->bHasFmt = sal_True; 332cdf0e10cSrcweir Any aFormat = xCol->getPropertyValue(C2U("FormatKey")); 333cdf0e10cSrcweir if(aFormat.hasValue()) 334cdf0e10cSrcweir { 335cdf0e10cSrcweir sal_Int32 nFmt = 0; 336cdf0e10cSrcweir aFormat >>= nFmt; 337cdf0e10cSrcweir if(xNumberFormats.is()) 338cdf0e10cSrcweir { 339cdf0e10cSrcweir try 340cdf0e10cSrcweir { 341cdf0e10cSrcweir Reference<XPropertySet> xNumProps = xNumberFormats->getByKey( nFmt ); 342cdf0e10cSrcweir Any aFormatVal = xNumProps->getPropertyValue(C2U("FormatString")); 343cdf0e10cSrcweir Any aLocale = xNumProps->getPropertyValue(C2U("Locale")); 344cdf0e10cSrcweir rtl::OUString sFormat; 345cdf0e10cSrcweir aFormatVal >>= sFormat; 346cdf0e10cSrcweir lang::Locale aLoc; 347cdf0e10cSrcweir aLocale >>= aLoc; 348cdf0e10cSrcweir long nKey = xDocNumberFormats->queryKey( sFormat, aLoc, sal_True); 349cdf0e10cSrcweir if(nKey < 0) 350cdf0e10cSrcweir { 351cdf0e10cSrcweir nKey = xDocNumberFormats->addNew( sFormat, aLoc ); 352cdf0e10cSrcweir } 353cdf0e10cSrcweir pNew->nDBNumFmt = nKey; 354cdf0e10cSrcweir } 355cdf0e10cSrcweir catch(const Exception& ) 356cdf0e10cSrcweir { 357cdf0e10cSrcweir DBG_ERROR("illegal number format key"); 358cdf0e10cSrcweir } 359cdf0e10cSrcweir } 360cdf0e10cSrcweir } 361cdf0e10cSrcweir else 362cdf0e10cSrcweir { 363cdf0e10cSrcweir pNew->nDBNumFmt = SwNewDBMgr::GetDbtoolsClient().getDefaultNumberFormat(xCol, 364cdf0e10cSrcweir xDocNumberFormatTypes, aDocLocale); 365cdf0e10cSrcweir } 366cdf0e10cSrcweir 367cdf0e10cSrcweir } 368cdf0e10cSrcweir break; 369cdf0e10cSrcweir } 370cdf0e10cSrcweir if( !aDBColumns.Insert( pNew )) 371cdf0e10cSrcweir { 372cdf0e10cSrcweir ASSERT( !this, "Spaltenname mehrfach vergeben?" ); 373cdf0e10cSrcweir delete pNew; 374cdf0e10cSrcweir } 375cdf0e10cSrcweir } 376cdf0e10cSrcweir } 377cdf0e10cSrcweir 378cdf0e10cSrcweir // Absatzvorlagen-ListBox fuellen 379cdf0e10cSrcweir { 380cdf0e10cSrcweir SfxStyleSheetBasePool* pPool = pView->GetDocShell()->GetStyleSheetPool(); 381cdf0e10cSrcweir pPool->SetSearchMask( SFX_STYLE_FAMILY_PARA, SFXSTYLEBIT_ALL ); 382cdf0e10cSrcweir aLbDbParaColl.InsertEntry( sNoTmpl ); 383cdf0e10cSrcweir 384cdf0e10cSrcweir const SfxStyleSheetBase* pBase = pPool->First(); 385cdf0e10cSrcweir while( pBase ) 386cdf0e10cSrcweir { 387cdf0e10cSrcweir aLbDbParaColl.InsertEntry( pBase->GetName() ); 388cdf0e10cSrcweir pBase = pPool->Next(); 389cdf0e10cSrcweir } 390cdf0e10cSrcweir aLbDbParaColl.SelectEntryPos( 0 ); 391cdf0e10cSrcweir } 392cdf0e10cSrcweir 393cdf0e10cSrcweir // steht der Cursor in einer Tabelle, darf NIE Tabelle auswaehlbar sein 394cdf0e10cSrcweir if( pView->GetWrtShell().GetTableFmt() ) 395cdf0e10cSrcweir { 396cdf0e10cSrcweir aRbAsTable.Enable( sal_False ); 397cdf0e10cSrcweir aRbAsField.Check( sal_True ); 398cdf0e10cSrcweir aRbDbFmtFromDb.Check( sal_True ); 399cdf0e10cSrcweir } 400cdf0e10cSrcweir else 401cdf0e10cSrcweir { 402cdf0e10cSrcweir aRbAsTable.Check( sal_True ); 403cdf0e10cSrcweir aRbDbFmtFromDb.Check( sal_True ); 404cdf0e10cSrcweir aIbDbcolOneFrom.Enable( sal_False ); 405cdf0e10cSrcweir aIbDbcolAllFrom.Enable( sal_False ); 406cdf0e10cSrcweir } 407cdf0e10cSrcweir 408cdf0e10cSrcweir aRbAsTable.SetClickHdl( LINK(this, SwInsertDBColAutoPilot, PageHdl )); 409cdf0e10cSrcweir aRbAsField.SetClickHdl( LINK(this, SwInsertDBColAutoPilot, PageHdl )); 410cdf0e10cSrcweir aRbAsText.SetClickHdl( LINK(this, SwInsertDBColAutoPilot, PageHdl )); 411cdf0e10cSrcweir 412cdf0e10cSrcweir aRbDbFmtFromDb.SetClickHdl( LINK(this, SwInsertDBColAutoPilot, DBFormatHdl )); 413cdf0e10cSrcweir aRbDbFmtFromUsr.SetClickHdl( LINK(this, SwInsertDBColAutoPilot, DBFormatHdl )); 414cdf0e10cSrcweir 415cdf0e10cSrcweir aPbTblFormat.SetClickHdl(LINK(this, SwInsertDBColAutoPilot, TblFmtHdl )); 416cdf0e10cSrcweir aPbTblAutofmt.SetClickHdl(LINK(this, SwInsertDBColAutoPilot, AutoFmtHdl )); 417cdf0e10cSrcweir 418cdf0e10cSrcweir aIbDbcolAllTo.SetClickHdl( LINK(this, SwInsertDBColAutoPilot, TblToFromHdl )); 419cdf0e10cSrcweir aIbDbcolOneTo.SetClickHdl( LINK(this, SwInsertDBColAutoPilot, TblToFromHdl )); 420cdf0e10cSrcweir aIbDbcolOneFrom.SetClickHdl( LINK(this, SwInsertDBColAutoPilot, TblToFromHdl )); 421cdf0e10cSrcweir aIbDbcolAllFrom.SetClickHdl( LINK(this, SwInsertDBColAutoPilot, TblToFromHdl )); 422cdf0e10cSrcweir aIbDbcolToEdit.SetClickHdl( LINK(this, SwInsertDBColAutoPilot, TblToFromHdl )); 423cdf0e10cSrcweir 424cdf0e10cSrcweir aCbTableHeadon.SetClickHdl( LINK(this, SwInsertDBColAutoPilot, HeaderHdl )); 425cdf0e10cSrcweir aRbHeadlColnms.SetClickHdl( LINK(this, SwInsertDBColAutoPilot, HeaderHdl )); 426cdf0e10cSrcweir aRbHeadlEmpty.SetClickHdl( LINK(this, SwInsertDBColAutoPilot, HeaderHdl )); 427cdf0e10cSrcweir 428cdf0e10cSrcweir aLbTxtDbColumn.SetSelectHdl( LINK( this, SwInsertDBColAutoPilot, SelectHdl )); 429cdf0e10cSrcweir aLbTblDbColumn.SetSelectHdl( LINK( this, SwInsertDBColAutoPilot, SelectHdl )); 430cdf0e10cSrcweir aLbDbFmtFromUsr.SetSelectHdl( LINK( this, SwInsertDBColAutoPilot, SelectHdl )); 431cdf0e10cSrcweir aLbTableCol.SetSelectHdl( LINK( this, SwInsertDBColAutoPilot, SelectHdl )); 432cdf0e10cSrcweir 433cdf0e10cSrcweir aLbTxtDbColumn.SetDoubleClickHdl( LINK( this, SwInsertDBColAutoPilot, DblClickHdl )); 434cdf0e10cSrcweir aLbTblDbColumn.SetDoubleClickHdl( LINK( this, SwInsertDBColAutoPilot, DblClickHdl )); 435cdf0e10cSrcweir aLbTableCol.SetDoubleClickHdl( LINK( this, SwInsertDBColAutoPilot, DblClickHdl )); 436cdf0e10cSrcweir 437cdf0e10cSrcweir for( sal_uInt16 n = 0; n < aDBColumns.Count(); ++n ) 438cdf0e10cSrcweir { 439cdf0e10cSrcweir const String& rS = aDBColumns[ n ]->sColumn; 440cdf0e10cSrcweir aLbTblDbColumn.InsertEntry( rS, n ); 441cdf0e10cSrcweir aLbTxtDbColumn.InsertEntry( rS, n ); 442cdf0e10cSrcweir } 443cdf0e10cSrcweir aLbTxtDbColumn.SelectEntryPos( 0 ); 444cdf0e10cSrcweir aLbTblDbColumn.SelectEntryPos( 0 ); 445cdf0e10cSrcweir 446cdf0e10cSrcweir // read configuration 447cdf0e10cSrcweir Load(); 448cdf0e10cSrcweir 449cdf0e10cSrcweir // Controls initialisieren: 450cdf0e10cSrcweir PageHdl( aRbAsTable.IsChecked() ? &aRbAsTable : &aRbAsField ); 451cdf0e10cSrcweir } 452cdf0e10cSrcweir /* --------------------------------------------------------------------------- 453cdf0e10cSrcweir 454cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 455cdf0e10cSrcweir SwInsertDBColAutoPilot::~SwInsertDBColAutoPilot() 456cdf0e10cSrcweir { 457cdf0e10cSrcweir delete pTblSet; 458cdf0e10cSrcweir delete pRep; 459cdf0e10cSrcweir 460cdf0e10cSrcweir // delete pConfig; 461cdf0e10cSrcweir delete pTAutoFmt; 462cdf0e10cSrcweir } 463cdf0e10cSrcweir /* --------------------------------------------------------------------------- 464cdf0e10cSrcweir 465cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 466cdf0e10cSrcweir IMPL_LINK( SwInsertDBColAutoPilot, PageHdl, Button*, pButton ) 467cdf0e10cSrcweir { 468cdf0e10cSrcweir sal_Bool bShowTbl = pButton == &aRbAsTable; 469cdf0e10cSrcweir 470cdf0e10cSrcweir String sTxt( pButton->GetText() ); 471cdf0e10cSrcweir aFlHead.SetText( MnemonicGenerator::EraseAllMnemonicChars( sTxt ) ); 472cdf0e10cSrcweir 473cdf0e10cSrcweir aLbTxtDbColumn.Show( !bShowTbl ); 474cdf0e10cSrcweir aIbDbcolToEdit.Show( !bShowTbl ); 475cdf0e10cSrcweir aEdDbText.Show( !bShowTbl ); 476cdf0e10cSrcweir aFtDbParaColl.Show( !bShowTbl ); 477cdf0e10cSrcweir aLbDbParaColl.Show( !bShowTbl ); 478cdf0e10cSrcweir 479cdf0e10cSrcweir aLbTblDbColumn.Show( bShowTbl ); 480cdf0e10cSrcweir aIbDbcolAllTo.Show( bShowTbl ); 481cdf0e10cSrcweir aIbDbcolOneTo.Show( bShowTbl ); 482cdf0e10cSrcweir aIbDbcolOneFrom.Show( bShowTbl ); 483cdf0e10cSrcweir aIbDbcolAllFrom.Show( bShowTbl ); 484cdf0e10cSrcweir aFtTableCol.Show( bShowTbl ); 485cdf0e10cSrcweir aLbTableCol.Show( bShowTbl ); 486cdf0e10cSrcweir aCbTableHeadon.Show( bShowTbl ); 487cdf0e10cSrcweir aRbHeadlColnms.Show( bShowTbl ); 488cdf0e10cSrcweir aRbHeadlEmpty.Show( bShowTbl ); 489cdf0e10cSrcweir aPbTblFormat.Show( bShowTbl ); 490cdf0e10cSrcweir aPbTblAutofmt.Show( bShowTbl ); 491cdf0e10cSrcweir 492cdf0e10cSrcweir if( bShowTbl ) 493cdf0e10cSrcweir aPbTblFormat.Enable( 0 != aLbTableCol.GetEntryCount() ); 494cdf0e10cSrcweir 495cdf0e10cSrcweir SelectHdl( bShowTbl ? &aLbTblDbColumn : &aLbTxtDbColumn ); 496cdf0e10cSrcweir 497cdf0e10cSrcweir return 0; 498cdf0e10cSrcweir } 499cdf0e10cSrcweir /* --------------------------------------------------------------------------- 500cdf0e10cSrcweir 501cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 502cdf0e10cSrcweir IMPL_LINK( SwInsertDBColAutoPilot, DBFormatHdl, Button*, pButton ) 503cdf0e10cSrcweir { 504cdf0e10cSrcweir sal_uInt16 nFndPos; 505cdf0e10cSrcweir ListBox& rBox = aRbAsTable.IsChecked() 506cdf0e10cSrcweir ? ( 0 == aLbTableCol.GetEntryData( 0 ) 507cdf0e10cSrcweir ? aLbTblDbColumn 508cdf0e10cSrcweir : aLbTableCol ) 509cdf0e10cSrcweir : aLbTxtDbColumn; 510cdf0e10cSrcweir 511cdf0e10cSrcweir SwInsDBColumn aSrch( rBox.GetSelectEntry(), 0 ); 512cdf0e10cSrcweir aDBColumns.Seek_Entry( &aSrch, &nFndPos ); 513cdf0e10cSrcweir 514cdf0e10cSrcweir sal_Bool bFromDB = &aRbDbFmtFromDb == pButton; 515cdf0e10cSrcweir aDBColumns[ nFndPos ]->bIsDBFmt = bFromDB; 516cdf0e10cSrcweir aLbDbFmtFromUsr.Enable( !bFromDB ); 517cdf0e10cSrcweir 518cdf0e10cSrcweir return 0; 519cdf0e10cSrcweir } 520cdf0e10cSrcweir /* --------------------------------------------------------------------------- 521cdf0e10cSrcweir 522cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 523cdf0e10cSrcweir IMPL_LINK( SwInsertDBColAutoPilot, TblToFromHdl, Button*, pButton ) 524cdf0e10cSrcweir { 525cdf0e10cSrcweir sal_Bool bChgEnable = sal_True, bEnableTo = sal_True, bEnableFrom = sal_True; 526cdf0e10cSrcweir aLbTblDbColumn.SetUpdateMode( sal_False ); 527cdf0e10cSrcweir aLbTableCol.SetUpdateMode( sal_False ); 528cdf0e10cSrcweir 529cdf0e10cSrcweir if( pButton == &aIbDbcolAllTo ) 530cdf0e10cSrcweir { 531cdf0e10cSrcweir bEnableTo = sal_False; 532cdf0e10cSrcweir 533cdf0e10cSrcweir sal_uInt16 n, nInsPos = aLbTableCol.GetSelectEntryPos(), 534cdf0e10cSrcweir nCnt = aLbTblDbColumn.GetEntryCount(); 535cdf0e10cSrcweir if( LISTBOX_APPEND == nInsPos ) 536cdf0e10cSrcweir for( n = 0; n < nCnt; ++n ) 537cdf0e10cSrcweir aLbTableCol.InsertEntry( aLbTblDbColumn.GetEntry( n ), 538cdf0e10cSrcweir LISTBOX_APPEND ); 539cdf0e10cSrcweir else 540cdf0e10cSrcweir for( n = 0; n < nCnt; ++n, ++nInsPos ) 541cdf0e10cSrcweir aLbTableCol.InsertEntry( aLbTblDbColumn.GetEntry( n ), nInsPos ); 542cdf0e10cSrcweir aLbTblDbColumn.Clear(); 543cdf0e10cSrcweir aLbTableCol.SelectEntryPos( nInsPos ); 544cdf0e10cSrcweir aLbTblDbColumn.SelectEntryPos( LISTBOX_APPEND ); 545cdf0e10cSrcweir } 546cdf0e10cSrcweir else if( pButton == &aIbDbcolOneTo && 547cdf0e10cSrcweir LISTBOX_ENTRY_NOTFOUND != aLbTblDbColumn.GetSelectEntryPos() ) 548cdf0e10cSrcweir { 549cdf0e10cSrcweir sal_uInt16 nInsPos = aLbTableCol.GetSelectEntryPos(), 550cdf0e10cSrcweir nDelPos = aLbTblDbColumn.GetSelectEntryPos(), 551cdf0e10cSrcweir nTopPos = aLbTblDbColumn.GetTopEntry(); 552cdf0e10cSrcweir aLbTableCol.InsertEntry( aLbTblDbColumn.GetEntry( nDelPos ), nInsPos ); 553cdf0e10cSrcweir aLbTblDbColumn.RemoveEntry( nDelPos ); 554cdf0e10cSrcweir 555cdf0e10cSrcweir aLbTableCol.SelectEntryPos( nInsPos ); 556cdf0e10cSrcweir if( nDelPos >= aLbTblDbColumn.GetEntryCount() ) 557cdf0e10cSrcweir nDelPos = aLbTblDbColumn.GetEntryCount() - 1; 558cdf0e10cSrcweir aLbTblDbColumn.SelectEntryPos( nDelPos ); 559cdf0e10cSrcweir aLbTblDbColumn.SetTopEntry( nTopPos ); 560cdf0e10cSrcweir 561cdf0e10cSrcweir bEnableTo = 0 != aLbTblDbColumn.GetEntryCount(); 562cdf0e10cSrcweir } 563cdf0e10cSrcweir else if( pButton == &aIbDbcolOneFrom ) 564cdf0e10cSrcweir { 565cdf0e10cSrcweir if( LISTBOX_ENTRY_NOTFOUND != aLbTableCol.GetSelectEntryPos() ) 566cdf0e10cSrcweir { 567cdf0e10cSrcweir sal_uInt16 nFndPos, nInsPos, 568cdf0e10cSrcweir nDelPos = aLbTableCol.GetSelectEntryPos(), 569cdf0e10cSrcweir nTopPos = aLbTableCol.GetTopEntry(); 570cdf0e10cSrcweir 571cdf0e10cSrcweir // die richtige InsertPos suchen!! 572cdf0e10cSrcweir SwInsDBColumn aSrch( aLbTableCol.GetEntry( nDelPos ), 0 ); 573cdf0e10cSrcweir aDBColumns.Seek_Entry( &aSrch, &nFndPos ); 574cdf0e10cSrcweir if( !nFndPos || nFndPos == aDBColumns.Count()-1 ) 575cdf0e10cSrcweir nInsPos = nFndPos; 576cdf0e10cSrcweir else 577cdf0e10cSrcweir { 578cdf0e10cSrcweir nInsPos = LISTBOX_ENTRY_NOTFOUND; 579cdf0e10cSrcweir while( ++nFndPos < aDBColumns.Count() && 580cdf0e10cSrcweir LISTBOX_ENTRY_NOTFOUND == (nInsPos = aLbTblDbColumn. 581cdf0e10cSrcweir GetEntryPos( String(aDBColumns[ nFndPos ]->sColumn ))) ) 582cdf0e10cSrcweir ; 583cdf0e10cSrcweir } 584cdf0e10cSrcweir 585cdf0e10cSrcweir aLbTblDbColumn.InsertEntry( aSrch.sColumn, nInsPos ); 586cdf0e10cSrcweir aLbTableCol.RemoveEntry( nDelPos ); 587cdf0e10cSrcweir 588cdf0e10cSrcweir if( nInsPos >= aLbTblDbColumn.GetEntryCount() ) 589cdf0e10cSrcweir nInsPos = aLbTblDbColumn.GetEntryCount() - 1; 590cdf0e10cSrcweir aLbTblDbColumn.SelectEntryPos( nInsPos ); 591cdf0e10cSrcweir 592cdf0e10cSrcweir if( nDelPos >= aLbTableCol.GetEntryCount() ) 593cdf0e10cSrcweir nDelPos = aLbTableCol.GetEntryCount() - 1; 594cdf0e10cSrcweir aLbTableCol.SelectEntryPos( nDelPos ); 595cdf0e10cSrcweir aLbTableCol.SetTopEntry( nTopPos ); 596cdf0e10cSrcweir } 597cdf0e10cSrcweir else 598cdf0e10cSrcweir bEnableTo = 0 != aLbTblDbColumn.GetEntryCount(); 599cdf0e10cSrcweir 600cdf0e10cSrcweir bEnableFrom = 0 != aLbTableCol.GetEntryCount(); 601cdf0e10cSrcweir } 602cdf0e10cSrcweir else if( pButton == &aIbDbcolAllFrom ) 603cdf0e10cSrcweir { 604cdf0e10cSrcweir bEnableFrom = sal_False; 605cdf0e10cSrcweir 606cdf0e10cSrcweir aLbTblDbColumn.Clear(); 607cdf0e10cSrcweir aLbTableCol.Clear(); 608cdf0e10cSrcweir for( sal_uInt16 n = 0; n < aDBColumns.Count(); ++n ) 609cdf0e10cSrcweir aLbTblDbColumn.InsertEntry( aDBColumns[ n ]->sColumn, n ); 610cdf0e10cSrcweir aLbTblDbColumn.SelectEntryPos( 0 ); 611cdf0e10cSrcweir } 612cdf0e10cSrcweir else if( pButton == &aIbDbcolToEdit ) 613cdf0e10cSrcweir { 614cdf0e10cSrcweir bChgEnable = sal_False; 615cdf0e10cSrcweir // Daten ins Edit moven: 616cdf0e10cSrcweir String aFld( aLbTxtDbColumn.GetSelectEntry() ); 617cdf0e10cSrcweir if( aFld.Len() ) 618cdf0e10cSrcweir { 619cdf0e10cSrcweir String aStr( aEdDbText.GetText() ); 620cdf0e10cSrcweir sal_uInt16 nPos = (sal_uInt16)aEdDbText.GetSelection().Min(); 621cdf0e10cSrcweir sal_uInt16 nSel = sal_uInt16(aEdDbText.GetSelection().Max()) - nPos; 622cdf0e10cSrcweir if( nSel ) 623cdf0e10cSrcweir // dann loesche erstmal die bestehende Selektion 624cdf0e10cSrcweir aStr.Erase( nPos, nSel ); 625cdf0e10cSrcweir 626cdf0e10cSrcweir aFld.Insert( cDBFldStart, 0 ); 627cdf0e10cSrcweir aFld += cDBFldEnd; 628cdf0e10cSrcweir if( aStr.Len() ) 629cdf0e10cSrcweir { 630cdf0e10cSrcweir if( nPos ) // ein Space davor 631cdf0e10cSrcweir { 632cdf0e10cSrcweir sal_Unicode c = aStr.GetChar( nPos-1 ); 633cdf0e10cSrcweir if( '\n' != c && '\r' != c ) 634cdf0e10cSrcweir aFld.Insert( ' ', 0 ); 635cdf0e10cSrcweir } 636cdf0e10cSrcweir if( nPos < aStr.Len() ) // ein Space dahinter 637cdf0e10cSrcweir { 638cdf0e10cSrcweir sal_Unicode c = aStr.GetChar( nPos ); 639cdf0e10cSrcweir if( '\n' != c && '\r' != c ) 640cdf0e10cSrcweir aFld += ' '; 641cdf0e10cSrcweir } 642cdf0e10cSrcweir } 643cdf0e10cSrcweir 644cdf0e10cSrcweir aStr.Insert( aFld, nPos ); 645cdf0e10cSrcweir aEdDbText.SetText( aStr ); 646cdf0e10cSrcweir nPos = nPos + aFld.Len(); 647cdf0e10cSrcweir aEdDbText.SetSelection( Selection( nPos )); 648cdf0e10cSrcweir } 649cdf0e10cSrcweir } 650cdf0e10cSrcweir 651cdf0e10cSrcweir if( bChgEnable ) 652cdf0e10cSrcweir { 653cdf0e10cSrcweir aIbDbcolOneTo.Enable( bEnableTo ); 654cdf0e10cSrcweir aIbDbcolAllTo.Enable( bEnableTo ); 655cdf0e10cSrcweir aIbDbcolOneFrom.Enable( bEnableFrom ); 656cdf0e10cSrcweir aIbDbcolAllFrom.Enable( bEnableFrom ); 657cdf0e10cSrcweir 658cdf0e10cSrcweir aRbDbFmtFromDb.Enable( sal_False ); 659cdf0e10cSrcweir aRbDbFmtFromUsr.Enable( sal_False ); 660cdf0e10cSrcweir aLbDbFmtFromUsr.Enable( sal_False ); 661cdf0e10cSrcweir 662cdf0e10cSrcweir aPbTblFormat.Enable( bEnableFrom ); 663cdf0e10cSrcweir } 664cdf0e10cSrcweir aLbTblDbColumn.SetUpdateMode( sal_True ); 665cdf0e10cSrcweir aLbTableCol.SetUpdateMode( sal_True ); 666cdf0e10cSrcweir 667cdf0e10cSrcweir return 0; 668cdf0e10cSrcweir } 669cdf0e10cSrcweir /* --------------------------------------------------------------------------- 670cdf0e10cSrcweir 671cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 672cdf0e10cSrcweir IMPL_LINK( SwInsertDBColAutoPilot, DblClickHdl, ListBox*, pBox ) 673cdf0e10cSrcweir { 674cdf0e10cSrcweir Button* pButton = 0; 675cdf0e10cSrcweir if( pBox == &aLbTxtDbColumn ) 676cdf0e10cSrcweir pButton = &aIbDbcolToEdit; 677cdf0e10cSrcweir else if( pBox == &aLbTblDbColumn && aIbDbcolOneTo.IsEnabled() ) 678cdf0e10cSrcweir pButton = &aIbDbcolOneTo; 679cdf0e10cSrcweir else if( pBox == &aLbTableCol && aIbDbcolOneFrom.IsEnabled() ) 680cdf0e10cSrcweir pButton = &aIbDbcolOneFrom; 681cdf0e10cSrcweir 682cdf0e10cSrcweir if( pButton ) 683cdf0e10cSrcweir TblToFromHdl( pButton ); 684cdf0e10cSrcweir 685cdf0e10cSrcweir return 0; 686cdf0e10cSrcweir } 687cdf0e10cSrcweir /* --------------------------------------------------------------------------- 688cdf0e10cSrcweir 689cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 690cdf0e10cSrcweir IMPL_LINK( SwInsertDBColAutoPilot, TblFmtHdl, PushButton*, pButton ) 691cdf0e10cSrcweir { 692cdf0e10cSrcweir SwWrtShell& rSh = pView->GetWrtShell(); 693cdf0e10cSrcweir sal_Bool bNewSet = sal_False; 694cdf0e10cSrcweir if( !pTblSet ) 695cdf0e10cSrcweir { 696cdf0e10cSrcweir bNewSet = sal_True; 697cdf0e10cSrcweir pTblSet = new SfxItemSet( rSh.GetAttrPool(), SwuiGetUITableAttrRange() ); 698cdf0e10cSrcweir 699cdf0e10cSrcweir //Ersteinmal die einfachen Attribute besorgen. 700cdf0e10cSrcweir pTblSet->Put( SfxStringItem( FN_PARAM_TABLE_NAME, rSh.GetUniqueTblName() )); 701cdf0e10cSrcweir pTblSet->Put( SfxUInt16Item( FN_PARAM_TABLE_HEADLINE, 1 ) ); 702cdf0e10cSrcweir 703cdf0e10cSrcweir pTblSet->Put( SfxUInt16Item( SID_BACKGRND_DESTINATION, 704cdf0e10cSrcweir rSh.GetViewOptions()->GetTblDest() )); 705cdf0e10cSrcweir 706cdf0e10cSrcweir SvxBrushItem aBrush( RES_BACKGROUND ); 707cdf0e10cSrcweir pTblSet->Put( aBrush ); 708cdf0e10cSrcweir pTblSet->Put( aBrush, SID_ATTR_BRUSH_ROW ); 709cdf0e10cSrcweir pTblSet->Put( aBrush, SID_ATTR_BRUSH_TABLE ); 710cdf0e10cSrcweir 711cdf0e10cSrcweir SvxBoxInfoItem aBoxInfo( SID_ATTR_BORDER_INNER ); 712cdf0e10cSrcweir // Tabellenvariante, wenn mehrere Tabellenzellen selektiert 713cdf0e10cSrcweir aBoxInfo.SetTable( sal_True ); 714cdf0e10cSrcweir // Abstandsfeld immer anzeigen 715cdf0e10cSrcweir aBoxInfo.SetDist( sal_True); 716cdf0e10cSrcweir // Minimalgroesse in Tabellen und Absaetzen setzen 717cdf0e10cSrcweir aBoxInfo.SetMinDist( sal_False ); 718cdf0e10cSrcweir // Default-Abstand immer setzen 719cdf0e10cSrcweir aBoxInfo.SetDefDist( MIN_BORDER_DIST ); 720cdf0e10cSrcweir // Einzelne Linien koennen nur in Tabellen DontCare-Status haben 721cdf0e10cSrcweir aBoxInfo.SetValid( VALID_DISABLE, sal_True ); 722cdf0e10cSrcweir pTblSet->Put( aBoxInfo ); 723cdf0e10cSrcweir 724cdf0e10cSrcweir SwGetCurColNumPara aPara; 725cdf0e10cSrcweir const sal_uInt16 nNum = rSh.GetCurColNum( &aPara ); 726cdf0e10cSrcweir long nWidth; 727cdf0e10cSrcweir 728cdf0e10cSrcweir if( nNum ) 729cdf0e10cSrcweir { 730cdf0e10cSrcweir nWidth = aPara.pPrtRect->Width(); 731cdf0e10cSrcweir const SwFmtCol& rCol = aPara.pFrmFmt->GetCol(); 732cdf0e10cSrcweir const SwColumns& rCols = rCol.GetColumns(); 733cdf0e10cSrcweir 734cdf0e10cSrcweir //nStart und nEnd initialisieren fuer nNum == 0 735cdf0e10cSrcweir long nWidth1 = 0, 736cdf0e10cSrcweir nStart1 = 0, 737cdf0e10cSrcweir nEnd1 = nWidth; 738cdf0e10cSrcweir for( sal_uInt16 i = 0; i < nNum; ++i ) 739cdf0e10cSrcweir { 740cdf0e10cSrcweir SwColumn* pCol = rCols[i]; 741cdf0e10cSrcweir nStart1 = pCol->GetLeft() + nWidth1; 742cdf0e10cSrcweir nWidth1 += (long)rCol.CalcColWidth( i, (sal_uInt16)nWidth ); 743cdf0e10cSrcweir nEnd1 = nWidth1 - pCol->GetRight(); 744cdf0e10cSrcweir } 745cdf0e10cSrcweir if(nStart1 || nEnd1 != nWidth) 746cdf0e10cSrcweir nWidth = nEnd1 - nStart1; 747cdf0e10cSrcweir } 748cdf0e10cSrcweir else 749cdf0e10cSrcweir nWidth = rSh.GetAnyCurRect( 750cdf0e10cSrcweir FRMTYPE_FLY_ANY & rSh.GetFrmType( 0, sal_True ) 751cdf0e10cSrcweir ? RECT_FLY_PRT_EMBEDDED 752cdf0e10cSrcweir : RECT_PAGE_PRT ).Width(); 753cdf0e10cSrcweir 754cdf0e10cSrcweir SwTabCols aTabCols; 755cdf0e10cSrcweir aTabCols.SetRight( nWidth ); 756cdf0e10cSrcweir aTabCols.SetRightMax( nWidth ); 757cdf0e10cSrcweir pRep = new SwTableRep( aTabCols, sal_False ); 758cdf0e10cSrcweir pRep->SetAlign( text::HoriOrientation::NONE ); 759cdf0e10cSrcweir pRep->SetSpace( nWidth ); 760cdf0e10cSrcweir pRep->SetWidth( nWidth ); 761cdf0e10cSrcweir pRep->SetWidthPercent( 100 ); 762cdf0e10cSrcweir pTblSet->Put( SwPtrItem( FN_TABLE_REP, pRep )); 763cdf0e10cSrcweir 764cdf0e10cSrcweir pTblSet->Put( SfxUInt16Item( SID_HTML_MODE, 765cdf0e10cSrcweir ::GetHtmlMode( pView->GetDocShell() ))); 766cdf0e10cSrcweir } 767cdf0e10cSrcweir 768cdf0e10cSrcweir if( aLbTableCol.GetEntryCount() != pRep->GetAllColCount() ) 769cdf0e10cSrcweir { 770cdf0e10cSrcweir // Anzahl der Spalten hat sich geaendert: dann muessen die 771cdf0e10cSrcweir // TabCols angepasst werden 772cdf0e10cSrcweir long nWidth = pRep->GetWidth(); 773cdf0e10cSrcweir sal_uInt16 nCols = aLbTableCol.GetEntryCount() - 1; 774cdf0e10cSrcweir SwTabCols aTabCols( nCols ); 775cdf0e10cSrcweir aTabCols.SetRight( nWidth ); 776cdf0e10cSrcweir aTabCols.SetRightMax( nWidth ); 777cdf0e10cSrcweir if( nCols ) 778cdf0e10cSrcweir for( sal_uInt16 n = 0, nStep = (sal_uInt16)(nWidth / (nCols+1)), nW = nStep; 779cdf0e10cSrcweir n < nCols; ++n, nW = nW + nStep ) 780cdf0e10cSrcweir { 781cdf0e10cSrcweir aTabCols.Insert( nW, sal_False, n ); 782cdf0e10cSrcweir } 783cdf0e10cSrcweir delete pRep; 784cdf0e10cSrcweir pRep = new SwTableRep( aTabCols, sal_False ); 785cdf0e10cSrcweir pRep->SetAlign( text::HoriOrientation::NONE ); 786cdf0e10cSrcweir pRep->SetSpace( nWidth ); 787cdf0e10cSrcweir pRep->SetWidth( nWidth ); 788cdf0e10cSrcweir pRep->SetWidthPercent( 100 ); 789cdf0e10cSrcweir pTblSet->Put( SwPtrItem( FN_TABLE_REP, pRep )); 790cdf0e10cSrcweir } 791cdf0e10cSrcweir 792cdf0e10cSrcweir SwAbstractDialogFactory* pFact = swui::GetFactory(); 793cdf0e10cSrcweir DBG_ASSERT(pFact, "SwAbstractDialogFactory fail!"); 794cdf0e10cSrcweir 795cdf0e10cSrcweir SfxAbstractTabDialog* pDlg = pFact->CreateSwTableTabDlg( pButton, rSh.GetAttrPool(),pTblSet, &rSh, DLG_FORMAT_TABLE ); 796cdf0e10cSrcweir DBG_ASSERT(pDlg, "Dialogdiet fail!"); 797cdf0e10cSrcweir if( RET_OK == pDlg->Execute() ) 798cdf0e10cSrcweir pTblSet->Put( *pDlg->GetOutputItemSet() ); 799cdf0e10cSrcweir else if( bNewSet ) 800cdf0e10cSrcweir { 801cdf0e10cSrcweir delete pTblSet, pTblSet = 0; 802cdf0e10cSrcweir delete pRep, pRep = 0; 803cdf0e10cSrcweir } 804cdf0e10cSrcweir delete pDlg; 805cdf0e10cSrcweir 806cdf0e10cSrcweir return 0; 807cdf0e10cSrcweir } 808cdf0e10cSrcweir /* --------------------------------------------------------------------------- 809cdf0e10cSrcweir 810cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 811cdf0e10cSrcweir IMPL_LINK( SwInsertDBColAutoPilot, AutoFmtHdl, PushButton*, pButton ) 812cdf0e10cSrcweir { 813cdf0e10cSrcweir SwAbstractDialogFactory* pFact = swui::GetFactory(); 814cdf0e10cSrcweir DBG_ASSERT(pFact, "SwAbstractDialogFactory fail!"); 815cdf0e10cSrcweir 816cdf0e10cSrcweir AbstractSwAutoFormatDlg* pDlg = pFact->CreateSwAutoFormatDlg(pButton, pView->GetWrtShellPtr(),DLG_AUTOFMT_TABLE, sal_False, pTAutoFmt); 817cdf0e10cSrcweir DBG_ASSERT(pDlg, "Dialogdiet fail!"); 818cdf0e10cSrcweir if( RET_OK == pDlg->Execute()) 819cdf0e10cSrcweir pDlg->FillAutoFmtOfIndex( pTAutoFmt ); 820cdf0e10cSrcweir delete pDlg; 821cdf0e10cSrcweir return 0; 822cdf0e10cSrcweir } 823cdf0e10cSrcweir /* --------------------------------------------------------------------------- 824cdf0e10cSrcweir 825cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 826cdf0e10cSrcweir IMPL_LINK( SwInsertDBColAutoPilot, SelectHdl, ListBox*, pBox ) 827cdf0e10cSrcweir { 828cdf0e10cSrcweir ListBox* pGetBox = pBox == &aLbDbFmtFromUsr 829cdf0e10cSrcweir ? ( aRbAsTable.IsChecked() 830cdf0e10cSrcweir ? ( 0 == aLbTableCol.GetEntryData( 0 ) 831cdf0e10cSrcweir ? &aLbTblDbColumn 832cdf0e10cSrcweir : &aLbTableCol ) 833cdf0e10cSrcweir : &aLbTxtDbColumn ) 834cdf0e10cSrcweir : pBox; 835cdf0e10cSrcweir 836cdf0e10cSrcweir sal_uInt16 nFndPos; 837cdf0e10cSrcweir SwInsDBColumn aSrch( pGetBox->GetSelectEntry(), 0 ); 838cdf0e10cSrcweir aDBColumns.Seek_Entry( &aSrch, &nFndPos ); 839cdf0e10cSrcweir 840cdf0e10cSrcweir if( pBox == &aLbDbFmtFromUsr ) 841cdf0e10cSrcweir { 842cdf0e10cSrcweir if( aSrch.sColumn.getLength() ) 843cdf0e10cSrcweir { 844cdf0e10cSrcweir aOldNumFmtLnk.Call( pBox ); 845cdf0e10cSrcweir aDBColumns[ nFndPos ]->nUsrNumFmt = aLbDbFmtFromUsr.GetFormat(); 846cdf0e10cSrcweir } 847cdf0e10cSrcweir } 848cdf0e10cSrcweir else 849cdf0e10cSrcweir { 850cdf0e10cSrcweir // an der FormatGroupBox den ausgewaehlten FeldNamen setzen, damit 851cdf0e10cSrcweir // klar ist, welches Feld ueber das Format eingestellt wird! 852cdf0e10cSrcweir String sTxt( aFlFormat.GetText().Copy( 0, nGBFmtLen )); 853cdf0e10cSrcweir if( !aSrch.sColumn.getLength() ) 854cdf0e10cSrcweir { 855cdf0e10cSrcweir aRbDbFmtFromDb.Enable( sal_False ); 856cdf0e10cSrcweir aRbDbFmtFromUsr.Enable( sal_False ); 857cdf0e10cSrcweir aLbDbFmtFromUsr.Enable( sal_False ); 858cdf0e10cSrcweir } 859cdf0e10cSrcweir else 860cdf0e10cSrcweir { 861cdf0e10cSrcweir sal_Bool bEnableFmt = aDBColumns[ nFndPos ]->bHasFmt; 862cdf0e10cSrcweir aRbDbFmtFromDb.Enable( bEnableFmt ); 863cdf0e10cSrcweir aRbDbFmtFromUsr.Enable( bEnableFmt ); 864cdf0e10cSrcweir 865cdf0e10cSrcweir if( bEnableFmt ) 866cdf0e10cSrcweir { 867cdf0e10cSrcweir (( sTxt += C2S(" (" )) += String(aSrch.sColumn) ) += (sal_Unicode)')'; 868cdf0e10cSrcweir } 869cdf0e10cSrcweir 870cdf0e10cSrcweir sal_Bool bIsDBFmt = aDBColumns[ nFndPos ]->bIsDBFmt; 871cdf0e10cSrcweir aRbDbFmtFromDb.Check( bIsDBFmt ); 872cdf0e10cSrcweir aRbDbFmtFromUsr.Check( !bIsDBFmt ); 873cdf0e10cSrcweir aLbDbFmtFromUsr.Enable( !bIsDBFmt ); 874cdf0e10cSrcweir if( !bIsDBFmt ) 875cdf0e10cSrcweir aLbDbFmtFromUsr.SetDefFormat( aDBColumns[ nFndPos ]->nUsrNumFmt ); 876cdf0e10cSrcweir } 877cdf0e10cSrcweir 878cdf0e10cSrcweir aFlFormat.SetText( sTxt ); 879cdf0e10cSrcweir 880cdf0e10cSrcweir // um spaeter zu wissen, welche ListBox die "aktive" war, wird sich 881cdf0e10cSrcweir // im 1. Eintrag ein Flag gemerkt, 882cdf0e10cSrcweir void* pPtr = pBox == &aLbTableCol ? &aLbTableCol : 0; 883cdf0e10cSrcweir aLbTableCol.SetEntryData( 0, pPtr ); 884cdf0e10cSrcweir } 885cdf0e10cSrcweir return 0; 886cdf0e10cSrcweir } 887cdf0e10cSrcweir /* --------------------------------------------------------------------------- 888cdf0e10cSrcweir 889cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 890cdf0e10cSrcweir IMPL_LINK( SwInsertDBColAutoPilot, HeaderHdl, Button*, pButton ) 891cdf0e10cSrcweir { 892cdf0e10cSrcweir if( pButton == &aCbTableHeadon ) 893cdf0e10cSrcweir { 894cdf0e10cSrcweir sal_Bool bEnable = aCbTableHeadon.IsChecked(); 895cdf0e10cSrcweir 896cdf0e10cSrcweir aRbHeadlColnms.Enable( bEnable ); 897cdf0e10cSrcweir aRbHeadlEmpty.Enable( bEnable ); 898cdf0e10cSrcweir } 899cdf0e10cSrcweir return 0; 900cdf0e10cSrcweir } 901cdf0e10cSrcweir /* --------------------------------------------------------------------------- 902cdf0e10cSrcweir 903cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 904cdf0e10cSrcweir static void lcl_InsTextInArr( const String& rTxt, _DB_Columns& rColArr ) 905cdf0e10cSrcweir { 906cdf0e10cSrcweir _DB_Column* pNew; 907cdf0e10cSrcweir sal_uInt16 nSttPos = 0, nFndPos; 908cdf0e10cSrcweir while( STRING_NOTFOUND != ( nFndPos = rTxt.Search( '\x0A', nSttPos )) ) 909cdf0e10cSrcweir { 910cdf0e10cSrcweir if( 1 < nFndPos ) 911cdf0e10cSrcweir { 912cdf0e10cSrcweir pNew = new _DB_Column( rTxt.Copy( nSttPos, nFndPos -1 ) ); 913cdf0e10cSrcweir rColArr.Insert( pNew, rColArr.Count() ); 914cdf0e10cSrcweir } 915cdf0e10cSrcweir pNew = new _DB_Column; 916cdf0e10cSrcweir rColArr.Insert( pNew, rColArr.Count() ); 917cdf0e10cSrcweir nSttPos = nFndPos + 1; 918cdf0e10cSrcweir } 919cdf0e10cSrcweir if( nSttPos < rTxt.Len() ) 920cdf0e10cSrcweir { 921cdf0e10cSrcweir pNew = new _DB_Column( rTxt.Copy( nSttPos ) ); 922cdf0e10cSrcweir rColArr.Insert( pNew, rColArr.Count() ); 923cdf0e10cSrcweir } 924cdf0e10cSrcweir } 925cdf0e10cSrcweir /* --------------------------------------------------------------------------- 926cdf0e10cSrcweir 927cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 928cdf0e10cSrcweir sal_Bool SwInsertDBColAutoPilot::SplitTextToColArr( const String& rTxt, 929cdf0e10cSrcweir _DB_Columns& rColArr, 930cdf0e10cSrcweir sal_Bool bInsField ) 931cdf0e10cSrcweir { 932cdf0e10cSrcweir // aus dem Text wieder die einzelnen Datenbank - Spalten erzeugen 933cdf0e10cSrcweir // und dann in einem Array speichern 934cdf0e10cSrcweir // Die Datenbankspalten stehen in <> und muessen im Array der Spalten 935cdf0e10cSrcweir // vorhanden sein: 936cdf0e10cSrcweir String sTxt( rTxt ); 937cdf0e10cSrcweir sal_uInt16 nFndPos, nEndPos, nSttPos = 0; 938cdf0e10cSrcweir 939cdf0e10cSrcweir while( STRING_NOTFOUND != ( nFndPos = sTxt.Search( cDBFldStart, nSttPos ))) 940cdf0e10cSrcweir { 941cdf0e10cSrcweir nSttPos = nFndPos + 1; 942cdf0e10cSrcweir if( STRING_NOTFOUND != ( nEndPos = sTxt.Search( cDBFldEnd, nSttPos+1 ))) 943cdf0e10cSrcweir { 944cdf0e10cSrcweir // Text in <> geklammert gefunden: was ist es denn: 945cdf0e10cSrcweir SwInsDBColumn aSrch( sTxt.Copy( nSttPos, nEndPos - nSttPos ), 0); 946cdf0e10cSrcweir if( aDBColumns.Seek_Entry( &aSrch, &nFndPos ) ) 947cdf0e10cSrcweir { 948cdf0e10cSrcweir // das ist ein gueltiges Feld 949cdf0e10cSrcweir // also sicher den Text "davor": 950cdf0e10cSrcweir const SwInsDBColumn& rFndCol = *aDBColumns[ nFndPos ]; 951cdf0e10cSrcweir 952cdf0e10cSrcweir _DB_Column* pNew; 953cdf0e10cSrcweir 954cdf0e10cSrcweir if( 1 < nSttPos ) 955cdf0e10cSrcweir { 956cdf0e10cSrcweir ::lcl_InsTextInArr( sTxt.Copy( 0, nSttPos-1 ), rColArr ); 957cdf0e10cSrcweir sTxt.Erase( 0, nSttPos-1 ); 958cdf0e10cSrcweir } 959cdf0e10cSrcweir 960cdf0e10cSrcweir sTxt.Erase( 0, (xub_StrLen)(rFndCol.sColumn.getLength() + 2) ); 961cdf0e10cSrcweir nSttPos = 0; 962cdf0e10cSrcweir 963cdf0e10cSrcweir sal_uInt16 nSubType = 0; 964cdf0e10cSrcweir sal_uLong nFormat; 965cdf0e10cSrcweir if( rFndCol.bHasFmt ) 966cdf0e10cSrcweir { 967cdf0e10cSrcweir if( rFndCol.bIsDBFmt ) 968cdf0e10cSrcweir nFormat = rFndCol.nDBNumFmt; 969cdf0e10cSrcweir else 970cdf0e10cSrcweir { 971cdf0e10cSrcweir nFormat = rFndCol.nUsrNumFmt; 972cdf0e10cSrcweir nSubType = nsSwExtendedSubType::SUB_OWN_FMT; 973cdf0e10cSrcweir } 974cdf0e10cSrcweir } 975cdf0e10cSrcweir else 976cdf0e10cSrcweir nFormat = 0; 977cdf0e10cSrcweir 978cdf0e10cSrcweir if( bInsField ) 979cdf0e10cSrcweir { 980cdf0e10cSrcweir SwWrtShell& rSh = pView->GetWrtShell(); 981cdf0e10cSrcweir SwDBFieldType aFldType( rSh.GetDoc(), aSrch.sColumn, 982cdf0e10cSrcweir aDBData ); 983cdf0e10cSrcweir pNew = new _DB_Column( rFndCol, *new SwDBField( 984cdf0e10cSrcweir (SwDBFieldType*)rSh.InsertFldType( aFldType ), 985cdf0e10cSrcweir nFormat ) ); 986cdf0e10cSrcweir if( nSubType ) 987cdf0e10cSrcweir pNew->DB_ColumnData.pField->SetSubType( nSubType ); 988cdf0e10cSrcweir } 989cdf0e10cSrcweir else 990cdf0e10cSrcweir pNew = new _DB_Column( rFndCol, nFormat ); 991cdf0e10cSrcweir 992cdf0e10cSrcweir rColArr.Insert( pNew, rColArr.Count() ); 993cdf0e10cSrcweir } 994cdf0e10cSrcweir } 995cdf0e10cSrcweir } 996cdf0e10cSrcweir 997cdf0e10cSrcweir // den letzten Text nicht vergessen 998cdf0e10cSrcweir if( sTxt.Len() ) 999cdf0e10cSrcweir ::lcl_InsTextInArr( sTxt, rColArr ); 1000cdf0e10cSrcweir 1001cdf0e10cSrcweir return 0 != rColArr.Count(); 1002cdf0e10cSrcweir } 1003cdf0e10cSrcweir /* --------------------------------------------------------------------------- 1004cdf0e10cSrcweir 1005cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 1006cdf0e10cSrcweir void SwInsertDBColAutoPilot::DataToDoc( const Sequence<Any>& rSelection, 1007cdf0e10cSrcweir Reference< XDataSource> xSource, 1008cdf0e10cSrcweir Reference< XConnection> xConnection, 1009cdf0e10cSrcweir Reference< sdbc::XResultSet > xResultSet ) 1010cdf0e10cSrcweir { 1011cdf0e10cSrcweir const Any* pSelection = rSelection.getLength() ? rSelection.getConstArray() : 0; 1012cdf0e10cSrcweir SwWrtShell& rSh = pView->GetWrtShell(); 1013cdf0e10cSrcweir 1014cdf0e10cSrcweir //with the drag and drop interface no result set is initially available 1015cdf0e10cSrcweir sal_Bool bDisposeResultSet = sal_False; 1016cdf0e10cSrcweir // we don't have a cursor, so we have to create our own RowSet 1017cdf0e10cSrcweir if ( !xResultSet.is() ) 1018cdf0e10cSrcweir { 1019cdf0e10cSrcweir xResultSet = SwNewDBMgr::createCursor(aDBData.sDataSource,aDBData.sCommand,aDBData.nCommandType,xConnection); 1020cdf0e10cSrcweir bDisposeResultSet = xResultSet.is(); 1021cdf0e10cSrcweir } 1022cdf0e10cSrcweir 1023cdf0e10cSrcweir Reference< sdbc::XRow > xRow(xResultSet, UNO_QUERY); 1024cdf0e10cSrcweir if ( !xRow.is() ) 1025cdf0e10cSrcweir return; 1026cdf0e10cSrcweir 1027cdf0e10cSrcweir rSh.StartAllAction(); 1028cdf0e10cSrcweir sal_Bool bUndo = rSh.DoesUndo(); 1029cdf0e10cSrcweir if( bUndo ) 1030cdf0e10cSrcweir rSh.StartUndo( UNDO_EMPTY ); 1031cdf0e10cSrcweir 1032cdf0e10cSrcweir sal_Bool bAsTable = aRbAsTable.IsChecked(); 1033cdf0e10cSrcweir SvNumberFormatter& rNumFmtr = *rSh.GetNumberFormatter(); 1034cdf0e10cSrcweir 1035cdf0e10cSrcweir if( rSh.HasSelection() ) 1036cdf0e10cSrcweir rSh.DelRight(); 1037cdf0e10cSrcweir 1038cdf0e10cSrcweir ::std::auto_ptr<SwWait> pWait; 1039cdf0e10cSrcweir 1040cdf0e10cSrcweir Reference< XColumnsSupplier > xColsSupp( xResultSet, UNO_QUERY ); 1041cdf0e10cSrcweir Reference <XNameAccess> xCols = xColsSupp->getColumns(); 1042cdf0e10cSrcweir 1043cdf0e10cSrcweir do{ // middle checked loop!! 1044cdf0e10cSrcweir if( bAsTable ) // Daten als Tabelle einfuegen 1045cdf0e10cSrcweir { 1046cdf0e10cSrcweir rSh.DoUndo( sal_False ); 1047cdf0e10cSrcweir 1048cdf0e10cSrcweir sal_uInt16 n, nRows = 0, nCols = aLbTableCol.GetEntryCount(); 1049cdf0e10cSrcweir if( aCbTableHeadon.IsChecked() ) 1050cdf0e10cSrcweir nRows++; 1051cdf0e10cSrcweir 1052cdf0e10cSrcweir if( pSelection ) 1053cdf0e10cSrcweir nRows = nRows + (sal_uInt16)rSelection.getLength(); 1054cdf0e10cSrcweir else 1055cdf0e10cSrcweir ++nRows; 1056cdf0e10cSrcweir 1057cdf0e10cSrcweir // bereite das Array fuer die ausgewaehlten Spalten auf 1058cdf0e10cSrcweir SwInsDBColumns_SAR aColFlds( 255 >= nCols ? (sal_uInt8)nCols : 255, 5 ); 1059cdf0e10cSrcweir for( n = 0; n < nCols; ++n ) 1060cdf0e10cSrcweir { 1061cdf0e10cSrcweir sal_uInt16 nFndPos; 1062cdf0e10cSrcweir SwInsDBColumn aSrch( aLbTableCol.GetEntry( n ), 0 ); 1063cdf0e10cSrcweir if( aDBColumns.Seek_Entry( &aSrch, &nFndPos ) ) 1064cdf0e10cSrcweir aColFlds.Insert( aDBColumns[ nFndPos ], n ); 1065cdf0e10cSrcweir else { 1066cdf0e10cSrcweir ASSERT( !this, "Datenbankspalte nicht mehr gefunden" ); 1067cdf0e10cSrcweir } 1068cdf0e10cSrcweir } 1069cdf0e10cSrcweir 1070cdf0e10cSrcweir if( nCols != aColFlds.Count() ) 1071cdf0e10cSrcweir { 1072cdf0e10cSrcweir ASSERT( !this, "nicht alle Datenbankspalten gefunden" ); 1073cdf0e10cSrcweir nCols = aColFlds.Count(); 1074cdf0e10cSrcweir } 1075cdf0e10cSrcweir 1076cdf0e10cSrcweir if(!nRows || !nCols) 1077cdf0e10cSrcweir { 1078cdf0e10cSrcweir ASSERT( !this, "wrong parameters" ); 1079cdf0e10cSrcweir break; 1080cdf0e10cSrcweir } 1081cdf0e10cSrcweir 1082cdf0e10cSrcweir const SwModuleOptions* pModOpt = SW_MOD()->GetModuleConfig(); 1083cdf0e10cSrcweir 1084cdf0e10cSrcweir sal_Bool bHTML = 0 != (::GetHtmlMode( pView->GetDocShell() ) & HTMLMODE_ON); 1085cdf0e10cSrcweir rSh.InsertTable( 1086cdf0e10cSrcweir pModOpt->GetInsTblFlags(bHTML), 1087cdf0e10cSrcweir nRows, nCols, text::HoriOrientation::FULL, (pSelection ? pTAutoFmt : 0) ); 1088cdf0e10cSrcweir rSh.MoveTable( GetfnTablePrev(), GetfnTableStart() ); 1089cdf0e10cSrcweir 1090cdf0e10cSrcweir if( pSelection && pTblSet ) 1091cdf0e10cSrcweir SetTabSet(); 1092cdf0e10cSrcweir 1093cdf0e10cSrcweir SfxItemSet aTblSet( rSh.GetAttrPool(), RES_BOXATR_FORMAT, 1094cdf0e10cSrcweir RES_BOXATR_VALUE ); 1095cdf0e10cSrcweir sal_Bool bIsAutoUpdateCells = rSh.IsAutoUpdateCells(); 1096cdf0e10cSrcweir rSh.SetAutoUpdateCells( sal_False ); 1097cdf0e10cSrcweir 1098cdf0e10cSrcweir 1099cdf0e10cSrcweir if( aCbTableHeadon.IsChecked() ) 1100cdf0e10cSrcweir { 1101cdf0e10cSrcweir for( n = 0; n < nCols; ++n ) 1102cdf0e10cSrcweir { 1103cdf0e10cSrcweir if( aRbHeadlColnms.IsChecked() ) 1104cdf0e10cSrcweir { 1105cdf0e10cSrcweir rSh.SwEditShell::Insert2( aColFlds[ n ]->sColumn ); 1106cdf0e10cSrcweir } 1107cdf0e10cSrcweir rSh.GoNextCell(); 1108cdf0e10cSrcweir } 1109cdf0e10cSrcweir } 1110cdf0e10cSrcweir else 1111cdf0e10cSrcweir rSh.SetRowsToRepeat( 0 ); 1112cdf0e10cSrcweir 1113cdf0e10cSrcweir for( sal_Int32 i = 0 ; ; ++i ) 1114cdf0e10cSrcweir { 1115cdf0e10cSrcweir sal_Bool bBreak = sal_False; 1116cdf0e10cSrcweir try 1117cdf0e10cSrcweir { 1118cdf0e10cSrcweir if(pSelection) 1119cdf0e10cSrcweir { 1120cdf0e10cSrcweir sal_Int32 nPos = 0; 1121cdf0e10cSrcweir pSelection[i] >>= nPos; 1122cdf0e10cSrcweir bBreak = !xResultSet->absolute(nPos); 1123cdf0e10cSrcweir } 1124cdf0e10cSrcweir else if(!i) 1125cdf0e10cSrcweir bBreak = !xResultSet->first(); 1126cdf0e10cSrcweir } 1127cdf0e10cSrcweir catch(const Exception& ) 1128cdf0e10cSrcweir { 1129cdf0e10cSrcweir bBreak = sal_True; 1130cdf0e10cSrcweir } 1131cdf0e10cSrcweir if(bBreak) 1132cdf0e10cSrcweir break; 1133cdf0e10cSrcweir 1134cdf0e10cSrcweir for( n = 0; n < nCols; ++n ) 1135cdf0e10cSrcweir { 1136cdf0e10cSrcweir // beim aller erstenmal KEIN GoNextCell, weil wir schon 1137cdf0e10cSrcweir // drin stehen. Auch nicht nach dem Insert das GoNextCell, 1138cdf0e10cSrcweir // weil am Ende eine leere Zeile einfuegt wird. 1139cdf0e10cSrcweir if( i || n ) 1140cdf0e10cSrcweir rSh.GoNextCell(); 1141cdf0e10cSrcweir 1142cdf0e10cSrcweir const SwInsDBColumn* pEntry = aColFlds[ n ]; 1143cdf0e10cSrcweir 1144cdf0e10cSrcweir Reference< XColumn > xColumn; 1145cdf0e10cSrcweir xCols->getByName(pEntry->sColumn) >>= xColumn; 1146cdf0e10cSrcweir Reference< XPropertySet > xColumnProps( xColumn, UNO_QUERY ); 1147cdf0e10cSrcweir sal_Int32 eDataType = 0; 1148cdf0e10cSrcweir if( xColumnProps.is() ) 1149cdf0e10cSrcweir { 1150cdf0e10cSrcweir Any aType = xColumnProps->getPropertyValue(C2U("Type")); 1151cdf0e10cSrcweir aType >>= eDataType; 1152cdf0e10cSrcweir } 1153cdf0e10cSrcweir try 1154cdf0e10cSrcweir { 1155cdf0e10cSrcweir if( pEntry->bHasFmt ) 1156cdf0e10cSrcweir { 1157cdf0e10cSrcweir SwTblBoxNumFormat aNumFmt( 1158cdf0e10cSrcweir pEntry->bIsDBFmt ? pEntry->nDBNumFmt 1159cdf0e10cSrcweir : pEntry->nUsrNumFmt ); 1160cdf0e10cSrcweir aTblSet.Put(aNumFmt); 1161cdf0e10cSrcweir if( xColumn.is() ) 1162cdf0e10cSrcweir { 1163cdf0e10cSrcweir double fVal = xColumn->getDouble(); 1164cdf0e10cSrcweir if( xColumn->wasNull() ) 1165cdf0e10cSrcweir aTblSet.ClearItem( RES_BOXATR_VALUE ); 1166cdf0e10cSrcweir else 1167cdf0e10cSrcweir { 1168cdf0e10cSrcweir if(rNumFmtr.GetType(aNumFmt.GetValue()) & NUMBERFORMAT_DATE) 1169cdf0e10cSrcweir { 1170cdf0e10cSrcweir ::Date aStandard(1,1,1900); 1171cdf0e10cSrcweir if (*rNumFmtr.GetNullDate() != aStandard) 1172cdf0e10cSrcweir fVal += (aStandard - *rNumFmtr.GetNullDate()); 1173cdf0e10cSrcweir } 1174cdf0e10cSrcweir aTblSet.Put( SwTblBoxValue( fVal )); 1175cdf0e10cSrcweir } 1176cdf0e10cSrcweir } 1177cdf0e10cSrcweir else 1178cdf0e10cSrcweir aTblSet.ClearItem( RES_BOXATR_VALUE ); 1179cdf0e10cSrcweir rSh.SetTblBoxFormulaAttrs( aTblSet ); 1180cdf0e10cSrcweir } 1181cdf0e10cSrcweir //#i60207# don't insert binary data as string - creates a loop 1182cdf0e10cSrcweir else if( DataType::BINARY == eDataType || 1183cdf0e10cSrcweir DataType::VARBINARY == eDataType || 1184cdf0e10cSrcweir DataType::LONGVARBINARY== eDataType || 1185cdf0e10cSrcweir DataType::SQLNULL == eDataType || 1186cdf0e10cSrcweir DataType::OTHER == eDataType || 1187cdf0e10cSrcweir DataType::OBJECT == eDataType || 1188cdf0e10cSrcweir DataType::DISTINCT == eDataType || 1189cdf0e10cSrcweir DataType::STRUCT == eDataType || 1190cdf0e10cSrcweir DataType::ARRAY == eDataType || 1191cdf0e10cSrcweir DataType::BLOB == eDataType || 1192cdf0e10cSrcweir DataType::CLOB == eDataType || 1193cdf0e10cSrcweir DataType::REF == eDataType 1194cdf0e10cSrcweir ) 1195cdf0e10cSrcweir { 1196cdf0e10cSrcweir // do nothing 1197cdf0e10cSrcweir } 1198cdf0e10cSrcweir else 1199cdf0e10cSrcweir { 1200cdf0e10cSrcweir rtl::OUString sVal = xColumn->getString(); 1201cdf0e10cSrcweir if(!xColumn->wasNull()) 1202cdf0e10cSrcweir { 1203cdf0e10cSrcweir rSh.SwEditShell::Insert2( sVal ); 1204cdf0e10cSrcweir } 1205cdf0e10cSrcweir } 1206cdf0e10cSrcweir } 1207cdf0e10cSrcweir catch(Exception& 1208cdf0e10cSrcweir #ifdef DBG_UTIL 1209cdf0e10cSrcweir aExcept 1210cdf0e10cSrcweir #endif 1211cdf0e10cSrcweir ) 1212cdf0e10cSrcweir { 1213cdf0e10cSrcweir DBG_ERROR(ByteString(String(aExcept.Message), gsl_getSystemTextEncoding()).GetBuffer()); 1214cdf0e10cSrcweir } 1215cdf0e10cSrcweir } 1216cdf0e10cSrcweir 1217cdf0e10cSrcweir if( !pSelection ) 1218cdf0e10cSrcweir { 1219cdf0e10cSrcweir if ( !xResultSet->next() ) 1220cdf0e10cSrcweir break; 1221cdf0e10cSrcweir } 1222cdf0e10cSrcweir else if( i+1 >= rSelection.getLength() ) 1223cdf0e10cSrcweir break; 1224cdf0e10cSrcweir 1225cdf0e10cSrcweir if( 10 == i ) 1226cdf0e10cSrcweir pWait = ::std::auto_ptr<SwWait>(new SwWait( *pView->GetDocShell(), sal_True )); 1227cdf0e10cSrcweir } 1228cdf0e10cSrcweir 1229cdf0e10cSrcweir rSh.MoveTable( GetfnTableCurr(), GetfnTableStart() ); 1230cdf0e10cSrcweir if( !pSelection && ( pTblSet || pTAutoFmt )) 1231cdf0e10cSrcweir { 1232cdf0e10cSrcweir if( pTblSet ) 1233cdf0e10cSrcweir SetTabSet(); 1234cdf0e10cSrcweir 1235cdf0e10cSrcweir if( pTAutoFmt ) 1236cdf0e10cSrcweir rSh.SetTableAutoFmt( *pTAutoFmt ); 1237cdf0e10cSrcweir } 1238cdf0e10cSrcweir rSh.SetAutoUpdateCells( bIsAutoUpdateCells ); 1239cdf0e10cSrcweir } 1240cdf0e10cSrcweir else // Daten als Felder/Text einfuegen 1241cdf0e10cSrcweir { 1242cdf0e10cSrcweir _DB_Columns aColArr; 1243cdf0e10cSrcweir if( SplitTextToColArr( aEdDbText.GetText(), aColArr, aRbAsField.IsChecked() ) ) 1244cdf0e10cSrcweir { 1245cdf0e10cSrcweir // jetzt kann bei jedem Datensatz einfach ueber das Array iteriert 1246cdf0e10cSrcweir // und die Daten eingefuegt werden 1247cdf0e10cSrcweir 1248cdf0e10cSrcweir if( !rSh.IsSttPara() ) 1249cdf0e10cSrcweir rSh.SwEditShell::SplitNode(); 1250cdf0e10cSrcweir if( !rSh.IsEndPara() ) 1251cdf0e10cSrcweir { 1252cdf0e10cSrcweir rSh.SwEditShell::SplitNode(); 1253cdf0e10cSrcweir rSh.SwCrsrShell::Left(1,CRSR_SKIP_CHARS); 1254cdf0e10cSrcweir } 1255cdf0e10cSrcweir 1256cdf0e10cSrcweir rSh.DoUndo( sal_False ); 1257cdf0e10cSrcweir 1258cdf0e10cSrcweir SwTxtFmtColl* pColl = 0; 1259cdf0e10cSrcweir { 1260cdf0e10cSrcweir String sTmplNm( aLbDbParaColl.GetSelectEntry() ); 1261cdf0e10cSrcweir if( sNoTmpl != sTmplNm ) 1262cdf0e10cSrcweir { 1263cdf0e10cSrcweir pColl = rSh.FindTxtFmtCollByName( sTmplNm ); 1264cdf0e10cSrcweir if( !pColl ) 1265cdf0e10cSrcweir { 1266cdf0e10cSrcweir sal_uInt16 nId = SwStyleNameMapper::GetPoolIdFromUIName( sTmplNm, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL ); 1267cdf0e10cSrcweir if( USHRT_MAX != nId ) 1268cdf0e10cSrcweir pColl = rSh.GetTxtCollFromPool( nId ); 1269cdf0e10cSrcweir else 1270cdf0e10cSrcweir pColl = rSh.MakeTxtFmtColl( sTmplNm ); 1271cdf0e10cSrcweir } 1272cdf0e10cSrcweir rSh.SetTxtFmtColl( pColl ); 1273cdf0e10cSrcweir } 1274cdf0e10cSrcweir } 1275cdf0e10cSrcweir 1276cdf0e10cSrcweir // fuers Einfuegen als Felder -> nach jedem Datensatz ein 1277cdf0e10cSrcweir // "NextField" einfuegen 1278cdf0e10cSrcweir SwDBFormatData aDBFormatData; 1279cdf0e10cSrcweir Reference< XMultiServiceFactory > xMgr( ::comphelper::getProcessServiceFactory() ); 1280cdf0e10cSrcweir if( xMgr.is() ) 1281cdf0e10cSrcweir { 1282cdf0e10cSrcweir Reference<XInterface> xInstance = xMgr->createInstance( C2U( "com.sun.star.util.NumberFormatter" )); 1283cdf0e10cSrcweir aDBFormatData.xFormatter = Reference<util::XNumberFormatter>(xInstance, UNO_QUERY) ; 1284cdf0e10cSrcweir } 1285cdf0e10cSrcweir 1286cdf0e10cSrcweir Reference<XPropertySet> xSourceProps(xSource, UNO_QUERY); 1287cdf0e10cSrcweir if(xSourceProps.is()) 1288cdf0e10cSrcweir { 1289cdf0e10cSrcweir Any aFormats = xSourceProps->getPropertyValue(C2U("NumberFormatsSupplier")); 1290cdf0e10cSrcweir if(aFormats.hasValue()) 1291cdf0e10cSrcweir { 1292cdf0e10cSrcweir Reference< util::XNumberFormatsSupplier> xSuppl; 1293cdf0e10cSrcweir aFormats >>= xSuppl; 1294cdf0e10cSrcweir if(xSuppl.is()) 1295cdf0e10cSrcweir { 1296cdf0e10cSrcweir Reference< XPropertySet > xSettings = xSuppl->getNumberFormatSettings(); 1297cdf0e10cSrcweir Any aNull = xSettings->getPropertyValue(C2U("NullDate")); 1298cdf0e10cSrcweir aNull >>= aDBFormatData.aNullDate; 1299cdf0e10cSrcweir if(aDBFormatData.xFormatter.is()) 1300cdf0e10cSrcweir aDBFormatData.xFormatter->attachNumberFormatsSupplier(xSuppl); 1301cdf0e10cSrcweir } 1302cdf0e10cSrcweir } 1303cdf0e10cSrcweir } 1304cdf0e10cSrcweir aDBFormatData.aLocale = SvxCreateLocale( rSh.GetCurLang() ); 1305cdf0e10cSrcweir SwDBNextSetField aNxtDBFld( (SwDBNextSetFieldType*)rSh. 1306cdf0e10cSrcweir GetFldType( 0, RES_DBNEXTSETFLD ), 1307cdf0e10cSrcweir C2S("1"), aEmptyStr, aDBData ); 1308cdf0e10cSrcweir 1309cdf0e10cSrcweir 1310cdf0e10cSrcweir sal_Bool bSetCrsr = sal_True; 1311cdf0e10cSrcweir sal_uInt16 n = 0, nCols = aColArr.Count(); 1312cdf0e10cSrcweir ::sw::mark::IMark* pMark = NULL; 1313cdf0e10cSrcweir for( sal_Int32 i = 0 ; ; ++i ) 1314cdf0e10cSrcweir { 1315cdf0e10cSrcweir sal_Bool bBreak = sal_False; 1316cdf0e10cSrcweir try 1317cdf0e10cSrcweir { 1318cdf0e10cSrcweir if(pSelection) 1319cdf0e10cSrcweir { 1320cdf0e10cSrcweir sal_Int32 nPos = 0; 1321cdf0e10cSrcweir pSelection[i] >>= nPos; 1322cdf0e10cSrcweir bBreak = !xResultSet->absolute(nPos); 1323cdf0e10cSrcweir } 1324cdf0e10cSrcweir else if(!i) 1325cdf0e10cSrcweir bBreak = !xResultSet->first(); 1326cdf0e10cSrcweir } 1327cdf0e10cSrcweir catch(Exception&) 1328cdf0e10cSrcweir { 1329cdf0e10cSrcweir bBreak = sal_True; 1330cdf0e10cSrcweir } 1331cdf0e10cSrcweir 1332cdf0e10cSrcweir if(bBreak) 1333cdf0e10cSrcweir break; 1334cdf0e10cSrcweir 1335cdf0e10cSrcweir 1336cdf0e10cSrcweir for( n = 0; n < nCols; ++n ) 1337cdf0e10cSrcweir { 1338cdf0e10cSrcweir _DB_Column* pDBCol = aColArr[ n ]; 1339cdf0e10cSrcweir String sIns; 1340cdf0e10cSrcweir switch( pDBCol->eColType ) 1341cdf0e10cSrcweir { 1342cdf0e10cSrcweir case _DB_Column::DB_FILLTEXT: 1343cdf0e10cSrcweir sIns = *pDBCol->DB_ColumnData.pText; 1344cdf0e10cSrcweir break; 1345cdf0e10cSrcweir 1346cdf0e10cSrcweir case _DB_Column::DB_SPLITPARA: 1347cdf0e10cSrcweir rSh.SplitNode(); 1348cdf0e10cSrcweir // wenn nicht die gleiche Vorlage die Follow Vorlage 1349cdf0e10cSrcweir // ist, dann muss die ausgewaehlte neu gesetzt werden 1350cdf0e10cSrcweir if( pColl && &pColl->GetNextTxtFmtColl() != pColl ) 1351cdf0e10cSrcweir rSh.SetTxtFmtColl( pColl ); 1352cdf0e10cSrcweir break; 1353cdf0e10cSrcweir 1354cdf0e10cSrcweir case _DB_Column::DB_COL_FIELD: 1355cdf0e10cSrcweir { 1356cdf0e10cSrcweir SwDBField *const pFld = static_cast<SwDBField *>( 1357cdf0e10cSrcweir pDBCol->DB_ColumnData.pField->CopyField()); 1358cdf0e10cSrcweir double nValue = DBL_MAX; 1359cdf0e10cSrcweir 1360cdf0e10cSrcweir Reference< XPropertySet > xColumnProps; 1361cdf0e10cSrcweir xCols->getByName(pDBCol->pColInfo->sColumn) >>= xColumnProps; 1362cdf0e10cSrcweir 1363cdf0e10cSrcweir pFld->SetExpansion( SwNewDBMgr::GetDBField( 1364cdf0e10cSrcweir xColumnProps, 1365cdf0e10cSrcweir aDBFormatData, 1366cdf0e10cSrcweir &nValue ) ); 1367cdf0e10cSrcweir if( DBL_MAX != nValue ) 1368cdf0e10cSrcweir { 1369cdf0e10cSrcweir Any aType = xColumnProps->getPropertyValue(C2U("Type")); 1370cdf0e10cSrcweir sal_Int32 eDataType = 0; 1371cdf0e10cSrcweir aType >>= eDataType; 1372cdf0e10cSrcweir if( DataType::DATE == eDataType || DataType::TIME == eDataType || 1373cdf0e10cSrcweir DataType::TIMESTAMP == eDataType) 1374cdf0e10cSrcweir 1375cdf0e10cSrcweir { 1376cdf0e10cSrcweir ::Date aStandard(1,1,1900); 1377cdf0e10cSrcweir ::Date aCompare(aDBFormatData.aNullDate.Day , 1378cdf0e10cSrcweir aDBFormatData.aNullDate.Month, 1379cdf0e10cSrcweir aDBFormatData.aNullDate.Year); 1380cdf0e10cSrcweir if(aStandard != aCompare) 1381cdf0e10cSrcweir nValue += (aStandard - aCompare); 1382cdf0e10cSrcweir } 1383cdf0e10cSrcweir pFld->ChgValue( nValue, sal_True ); 1384cdf0e10cSrcweir } 1385cdf0e10cSrcweir pFld->SetInitialized(); 1386cdf0e10cSrcweir 1387cdf0e10cSrcweir rSh.Insert( *pFld ); 1388cdf0e10cSrcweir delete pFld; 1389cdf0e10cSrcweir } 1390cdf0e10cSrcweir break; 1391cdf0e10cSrcweir 1392cdf0e10cSrcweir case _DB_Column::DB_COL_TEXT: 1393cdf0e10cSrcweir { 1394cdf0e10cSrcweir double nValue = DBL_MAX; 1395cdf0e10cSrcweir Reference< XPropertySet > xColumnProps; 1396cdf0e10cSrcweir xCols->getByName(pDBCol->pColInfo->sColumn) >>= xColumnProps; 1397cdf0e10cSrcweir sIns = SwNewDBMgr::GetDBField( 1398cdf0e10cSrcweir xColumnProps, 1399cdf0e10cSrcweir aDBFormatData, 1400cdf0e10cSrcweir &nValue ); 1401cdf0e10cSrcweir if( pDBCol->DB_ColumnData.nFormat && 1402cdf0e10cSrcweir DBL_MAX != nValue ) 1403cdf0e10cSrcweir { 1404cdf0e10cSrcweir Color* pCol; 1405cdf0e10cSrcweir if(rNumFmtr.GetType(pDBCol->DB_ColumnData.nFormat) & NUMBERFORMAT_DATE) 1406cdf0e10cSrcweir { 1407cdf0e10cSrcweir ::Date aStandard(1,1,1900); 1408cdf0e10cSrcweir if (*rNumFmtr.GetNullDate() != aStandard) 1409cdf0e10cSrcweir nValue += (aStandard - *rNumFmtr.GetNullDate()); 1410cdf0e10cSrcweir } 1411cdf0e10cSrcweir rNumFmtr.GetOutputString( nValue, 1412cdf0e10cSrcweir pDBCol->DB_ColumnData.nFormat, 1413cdf0e10cSrcweir sIns, &pCol ); 1414cdf0e10cSrcweir } 1415cdf0e10cSrcweir } 1416cdf0e10cSrcweir break; 1417cdf0e10cSrcweir } 1418cdf0e10cSrcweir 1419cdf0e10cSrcweir if( sIns.Len() ) 1420cdf0e10cSrcweir rSh.Insert( sIns ); 1421cdf0e10cSrcweir 1422cdf0e10cSrcweir if( bSetCrsr && sIns.Len() ) 1423cdf0e10cSrcweir { 1424cdf0e10cSrcweir // zum Anfang und eine Mark setzen, damit der 1425cdf0e10cSrcweir // Cursor am Ende wieder auf Anfangsposition 1426cdf0e10cSrcweir // gesetzt werden kann. 1427cdf0e10cSrcweir 1428cdf0e10cSrcweir // rSh.SwCrsrShell::MovePara( fnParaCurr, fnParaStart ); 1429cdf0e10cSrcweir rSh.SwCrsrShell::MovePara( 1430cdf0e10cSrcweir GetfnParaCurr(), GetfnParaStart() ); 1431cdf0e10cSrcweir pMark = rSh.SetBookmark( 1432cdf0e10cSrcweir KeyCode(), 1433cdf0e10cSrcweir ::rtl::OUString(), 1434cdf0e10cSrcweir ::rtl::OUString(), IDocumentMarkAccess::UNO_BOOKMARK ); 1435cdf0e10cSrcweir // rSh.SwCrsrShell::MovePara( fnParaCurr, fnParaEnd ); 1436cdf0e10cSrcweir rSh.SwCrsrShell::MovePara( 1437cdf0e10cSrcweir GetfnParaCurr(), GetfnParaEnd() ); 1438cdf0e10cSrcweir bSetCrsr = sal_False; 1439cdf0e10cSrcweir } 1440cdf0e10cSrcweir } 1441cdf0e10cSrcweir 1442cdf0e10cSrcweir if( !pSelection ) 1443cdf0e10cSrcweir { 1444cdf0e10cSrcweir sal_Bool bNext = xResultSet->next(); 1445cdf0e10cSrcweir if(!bNext) 1446cdf0e10cSrcweir break; 1447cdf0e10cSrcweir } 1448cdf0e10cSrcweir else if( i+1 >= rSelection.getLength() ) 1449cdf0e10cSrcweir break; 1450cdf0e10cSrcweir 1451cdf0e10cSrcweir if( aRbAsField.IsChecked() ) 1452cdf0e10cSrcweir rSh.Insert( aNxtDBFld ); 1453cdf0e10cSrcweir 1454cdf0e10cSrcweir if( !rSh.IsSttPara() ) 1455cdf0e10cSrcweir rSh.SwEditShell::SplitNode(); 1456cdf0e10cSrcweir 1457cdf0e10cSrcweir if( 10 == i ) 1458cdf0e10cSrcweir pWait = ::std::auto_ptr<SwWait>(new SwWait( *pView->GetDocShell(), sal_True )); 1459cdf0e10cSrcweir } 1460cdf0e10cSrcweir 1461cdf0e10cSrcweir if( !bSetCrsr && pMark != NULL) 1462cdf0e10cSrcweir { 1463cdf0e10cSrcweir rSh.SetMark(); 1464cdf0e10cSrcweir rSh.GotoMark( pMark ); 1465cdf0e10cSrcweir rSh.getIDocumentMarkAccess()->deleteMark( pMark ); 1466cdf0e10cSrcweir break; 1467cdf0e10cSrcweir } 1468cdf0e10cSrcweir } 1469cdf0e10cSrcweir } 1470cdf0e10cSrcweir // write configuration 1471cdf0e10cSrcweir Commit(); 1472cdf0e10cSrcweir }while( sal_False ); // middle checked loop 1473cdf0e10cSrcweir 1474cdf0e10cSrcweir if( bUndo ) 1475cdf0e10cSrcweir { 1476cdf0e10cSrcweir rSh.DoUndo( sal_True ); 1477cdf0e10cSrcweir rSh.AppendUndoForInsertFromDB( bAsTable ); 1478cdf0e10cSrcweir rSh.EndUndo( UNDO_EMPTY ); 1479cdf0e10cSrcweir } 1480cdf0e10cSrcweir rSh.ClearMark(); 1481cdf0e10cSrcweir rSh.EndAllAction(); 1482cdf0e10cSrcweir 1483cdf0e10cSrcweir if ( bDisposeResultSet ) 1484cdf0e10cSrcweir ::comphelper::disposeComponent(xResultSet); 1485cdf0e10cSrcweir } 1486cdf0e10cSrcweir void SwInsertDBColAutoPilot::SetTabSet() 1487cdf0e10cSrcweir { 1488cdf0e10cSrcweir SwWrtShell& rSh = pView->GetWrtShell(); 1489cdf0e10cSrcweir const SfxPoolItem* pItem; 1490cdf0e10cSrcweir 1491cdf0e10cSrcweir if( pTAutoFmt ) 1492cdf0e10cSrcweir { 1493cdf0e10cSrcweir if( pTAutoFmt->IsFrame() ) 1494cdf0e10cSrcweir { 1495cdf0e10cSrcweir // Umrandung kommt vom AutoFormat 1496cdf0e10cSrcweir pTblSet->ClearItem( RES_BOX ); 1497cdf0e10cSrcweir pTblSet->ClearItem( SID_ATTR_BORDER_INNER ); 1498cdf0e10cSrcweir } 1499cdf0e10cSrcweir if( pTAutoFmt->IsBackground() ) 1500cdf0e10cSrcweir { 1501cdf0e10cSrcweir pTblSet->ClearItem( RES_BACKGROUND ); 1502cdf0e10cSrcweir pTblSet->ClearItem( SID_ATTR_BRUSH_ROW ); 1503cdf0e10cSrcweir pTblSet->ClearItem( SID_ATTR_BRUSH_TABLE ); 1504cdf0e10cSrcweir } 1505cdf0e10cSrcweir } 1506cdf0e10cSrcweir else 1507cdf0e10cSrcweir { 1508cdf0e10cSrcweir // die Defaults wieder entfernen, es macht keinen Sinn sie zu setzen 1509cdf0e10cSrcweir SvxBrushItem aBrush( RES_BACKGROUND ); 1510cdf0e10cSrcweir static sal_uInt16 __READONLY_DATA aIds[3] = 1511cdf0e10cSrcweir { RES_BACKGROUND, SID_ATTR_BRUSH_ROW, SID_ATTR_BRUSH_TABLE }; 1512cdf0e10cSrcweir for( int i = 0; i < 3; ++i ) 1513cdf0e10cSrcweir if( SFX_ITEM_SET == pTblSet->GetItemState( aIds[ i ], 1514cdf0e10cSrcweir sal_False, &pItem ) && *pItem == aBrush ) 1515cdf0e10cSrcweir pTblSet->ClearItem( aIds[ i ] ); 1516cdf0e10cSrcweir } 1517cdf0e10cSrcweir 1518cdf0e10cSrcweir if( SFX_ITEM_SET == pTblSet->GetItemState( FN_PARAM_TABLE_NAME, sal_False, 1519cdf0e10cSrcweir &pItem ) && ((const SfxStringItem*)pItem)->GetValue() == 1520cdf0e10cSrcweir rSh.GetTableFmt()->GetName() ) 1521cdf0e10cSrcweir pTblSet->ClearItem( FN_PARAM_TABLE_NAME ); 1522cdf0e10cSrcweir 1523cdf0e10cSrcweir rSh.MoveTable( GetfnTableCurr(), GetfnTableStart() ); 1524cdf0e10cSrcweir rSh.SetMark(); 1525cdf0e10cSrcweir rSh.MoveTable( GetfnTableCurr(), GetfnTableEnd() ); 1526cdf0e10cSrcweir 1527cdf0e10cSrcweir ItemSetToTableParam( *pTblSet, rSh ); 1528cdf0e10cSrcweir 1529cdf0e10cSrcweir rSh.ClearMark(); 1530cdf0e10cSrcweir rSh.MoveTable( GetfnTableCurr(), GetfnTableStart() ); 1531cdf0e10cSrcweir } 1532cdf0e10cSrcweir 1533cdf0e10cSrcweir /* */ 1534cdf0e10cSrcweir 1535cdf0e10cSrcweir 1536cdf0e10cSrcweir _DB_ColumnConfigData::~_DB_ColumnConfigData() {} 1537cdf0e10cSrcweir 1538cdf0e10cSrcweir /* -----------------------------05.12.00 16:15-------------------------------- 1539cdf0e10cSrcweir 1540cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 1541cdf0e10cSrcweir static Sequence<rtl::OUString> lcl_createSourceNames(const String& rNodeName) 1542cdf0e10cSrcweir { 1543cdf0e10cSrcweir Sequence<rtl::OUString> aSourceNames(11); 1544cdf0e10cSrcweir rtl::OUString* pNames = aSourceNames.getArray(); 1545cdf0e10cSrcweir 1546cdf0e10cSrcweir String sTmp( rNodeName ); 1547cdf0e10cSrcweir const xub_StrLen nPos = sTmp.Len(); 1548cdf0e10cSrcweir pNames[0] = sTmp.ReplaceAscii( nPos, STRING_MAXLEN, 1549cdf0e10cSrcweir RTL_CONSTASCII_STRINGPARAM( "/DataSource" )); 1550cdf0e10cSrcweir pNames[1] = sTmp.ReplaceAscii( nPos, STRING_MAXLEN, 1551cdf0e10cSrcweir RTL_CONSTASCII_STRINGPARAM( "/Command" )); 1552cdf0e10cSrcweir pNames[2] = sTmp.ReplaceAscii( nPos, STRING_MAXLEN, 1553cdf0e10cSrcweir RTL_CONSTASCII_STRINGPARAM( "/CommandType" )); 1554cdf0e10cSrcweir pNames[3] = sTmp.ReplaceAscii( nPos, STRING_MAXLEN, 1555cdf0e10cSrcweir RTL_CONSTASCII_STRINGPARAM( "/ColumnsToText" )); 1556cdf0e10cSrcweir pNames[4] = sTmp.ReplaceAscii( nPos, STRING_MAXLEN, 1557cdf0e10cSrcweir RTL_CONSTASCII_STRINGPARAM( "/ColumnsToTable" )); 1558cdf0e10cSrcweir pNames[5] = sTmp.ReplaceAscii( nPos, STRING_MAXLEN, 1559cdf0e10cSrcweir RTL_CONSTASCII_STRINGPARAM( "/ParaStyle" )); 1560cdf0e10cSrcweir pNames[6] = sTmp.ReplaceAscii( nPos, STRING_MAXLEN, 1561cdf0e10cSrcweir RTL_CONSTASCII_STRINGPARAM( "/TableAutoFormat" )); 1562cdf0e10cSrcweir pNames[7] = sTmp.ReplaceAscii( nPos, STRING_MAXLEN, 1563cdf0e10cSrcweir RTL_CONSTASCII_STRINGPARAM( "/IsTable" )); 1564cdf0e10cSrcweir pNames[8] = sTmp.ReplaceAscii( nPos, STRING_MAXLEN, 1565cdf0e10cSrcweir RTL_CONSTASCII_STRINGPARAM( "/IsField" )); 1566cdf0e10cSrcweir pNames[9] = sTmp.ReplaceAscii( nPos, STRING_MAXLEN, 1567cdf0e10cSrcweir RTL_CONSTASCII_STRINGPARAM( "/IsHeadlineOn" )); 1568cdf0e10cSrcweir pNames[10] = sTmp.ReplaceAscii( nPos, STRING_MAXLEN, 1569cdf0e10cSrcweir RTL_CONSTASCII_STRINGPARAM( "/IsEmptyHeadline" )); 1570cdf0e10cSrcweir return aSourceNames; 1571cdf0e10cSrcweir } 1572cdf0e10cSrcweir /* -----------------------------05.12.00 16:25-------------------------------- 1573cdf0e10cSrcweir 1574cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 1575cdf0e10cSrcweir static Sequence<rtl::OUString> lcl_CreateSubNames( const String& rSubNodeName ) 1576cdf0e10cSrcweir { 1577cdf0e10cSrcweir Sequence<rtl::OUString> aSubSourceNames(6); 1578cdf0e10cSrcweir rtl::OUString* pNames = aSubSourceNames.getArray(); 1579cdf0e10cSrcweir String sTmp( rSubNodeName ); 1580cdf0e10cSrcweir const xub_StrLen nPos = sTmp.Len(); 1581cdf0e10cSrcweir pNames[0] = sTmp.ReplaceAscii( nPos, STRING_MAXLEN, 1582cdf0e10cSrcweir RTL_CONSTASCII_STRINGPARAM( "/ColumnName" )); 1583cdf0e10cSrcweir pNames[1] = sTmp.ReplaceAscii( nPos, STRING_MAXLEN, 1584cdf0e10cSrcweir RTL_CONSTASCII_STRINGPARAM( "/ColumnIndex" )); 1585cdf0e10cSrcweir pNames[2] = sTmp.ReplaceAscii( nPos, STRING_MAXLEN, 1586cdf0e10cSrcweir RTL_CONSTASCII_STRINGPARAM( "/IsNumberFormat" )); 1587cdf0e10cSrcweir pNames[3] = sTmp.ReplaceAscii( nPos, STRING_MAXLEN, 1588cdf0e10cSrcweir RTL_CONSTASCII_STRINGPARAM( "/IsNumberFormatFromDataBase" )); 1589cdf0e10cSrcweir pNames[4] = sTmp.ReplaceAscii( nPos, STRING_MAXLEN, 1590cdf0e10cSrcweir RTL_CONSTASCII_STRINGPARAM( "/NumberFormat" )); 1591cdf0e10cSrcweir pNames[5] = sTmp.ReplaceAscii( nPos, STRING_MAXLEN, 1592cdf0e10cSrcweir RTL_CONSTASCII_STRINGPARAM( "/NumberFormatLocale" )); 1593cdf0e10cSrcweir return aSubSourceNames; 1594cdf0e10cSrcweir } 1595cdf0e10cSrcweir /* -----------------------------06.12.00 13:03-------------------------------- 1596cdf0e10cSrcweir 1597cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 1598cdf0e10cSrcweir static rtl::OUString lcl_CreateUniqueName(const Sequence<rtl::OUString>& aNames) 1599cdf0e10cSrcweir { 1600cdf0e10cSrcweir sal_Int32 nIdx = aNames.getLength(); 1601cdf0e10cSrcweir const rtl::OUString* pNames = aNames.getConstArray(); 1602cdf0e10cSrcweir rtl::OUString sTest(C2U("_")); 1603cdf0e10cSrcweir rtl::OUString sRet; 1604cdf0e10cSrcweir while(sal_True) 1605cdf0e10cSrcweir { 1606cdf0e10cSrcweir sRet = sTest; sRet += rtl::OUString::valueOf(nIdx++); 1607cdf0e10cSrcweir sal_Bool bFound = sal_False; 1608cdf0e10cSrcweir for(sal_Int32 i = 0; i < aNames.getLength(); i++) 1609cdf0e10cSrcweir { 1610cdf0e10cSrcweir if(pNames[i] == sRet) 1611cdf0e10cSrcweir { 1612cdf0e10cSrcweir bFound = sal_True; 1613cdf0e10cSrcweir break; 1614cdf0e10cSrcweir } 1615cdf0e10cSrcweir } 1616cdf0e10cSrcweir if(!bFound) 1617cdf0e10cSrcweir break; 1618cdf0e10cSrcweir } 1619cdf0e10cSrcweir return sRet; 1620cdf0e10cSrcweir } 1621cdf0e10cSrcweir /* -----------------------------05.12.00 15:00-------------------------------- 1622cdf0e10cSrcweir 1623cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 1624cdf0e10cSrcweir void SwInsertDBColAutoPilot::Notify( const ::com::sun::star::uno::Sequence< rtl::OUString >& ) {} 1625cdf0e10cSrcweir 1626cdf0e10cSrcweir void SwInsertDBColAutoPilot::Commit() 1627cdf0e10cSrcweir { 1628cdf0e10cSrcweir Sequence <rtl::OUString> aNames = GetNodeNames(rtl::OUString()); 1629cdf0e10cSrcweir const rtl::OUString* pNames = aNames.getArray(); 1630cdf0e10cSrcweir //remove entries that contain this data source + table at first 1631cdf0e10cSrcweir for(sal_Int32 nNode = 0; nNode < aNames.getLength(); nNode++) 1632cdf0e10cSrcweir { 1633cdf0e10cSrcweir Sequence<rtl::OUString> aSourceNames(2); 1634cdf0e10cSrcweir rtl::OUString* pSourceNames = aSourceNames.getArray(); 1635cdf0e10cSrcweir pSourceNames[0] = pNames[nNode]; 1636cdf0e10cSrcweir pSourceNames[0] += C2U("/DataSource"); 1637cdf0e10cSrcweir pSourceNames[1] = pNames[nNode]; 1638cdf0e10cSrcweir pSourceNames[1] += C2U("/Command"); 1639cdf0e10cSrcweir Sequence<Any> aSourceProperties = GetProperties(aSourceNames); 1640cdf0e10cSrcweir const Any* pSourceProps = aSourceProperties.getArray(); 1641cdf0e10cSrcweir rtl::OUString sSource, sCommand; 1642cdf0e10cSrcweir pSourceProps[0] >>= sSource; 1643cdf0e10cSrcweir pSourceProps[1] >>= sCommand; 1644cdf0e10cSrcweir if(sSource.equals(aDBData.sDataSource) && sCommand.equals(aDBData.sCommand)) 1645cdf0e10cSrcweir { 1646cdf0e10cSrcweir Sequence<rtl::OUString> aElements(1); 1647cdf0e10cSrcweir aElements.getArray()[0] = pNames[nNode]; 1648cdf0e10cSrcweir ClearNodeElements(rtl::OUString(), aElements); 1649cdf0e10cSrcweir } 1650cdf0e10cSrcweir } 1651cdf0e10cSrcweir 1652cdf0e10cSrcweir aNames = GetNodeNames(rtl::OUString()); 1653cdf0e10cSrcweir rtl::OUString sNewNode = lcl_CreateUniqueName(aNames); 1654cdf0e10cSrcweir Sequence<rtl::OUString> aNodeNames = lcl_createSourceNames(sNewNode); 1655cdf0e10cSrcweir Sequence<PropertyValue> aValues(aNodeNames.getLength()); 1656cdf0e10cSrcweir PropertyValue* pValues = aValues.getArray(); 1657cdf0e10cSrcweir const rtl::OUString* pNodeNames = aNodeNames.getConstArray(); 1658cdf0e10cSrcweir rtl::OUString sSlash(C2U("/")); 1659cdf0e10cSrcweir for(sal_Int32 i = 0; i < aNodeNames.getLength(); i++) 1660cdf0e10cSrcweir { 1661cdf0e10cSrcweir pValues[i].Name = sSlash; 1662cdf0e10cSrcweir pValues[i].Name += pNodeNames[i]; 1663cdf0e10cSrcweir } 1664cdf0e10cSrcweir 1665cdf0e10cSrcweir pValues[0].Value <<= rtl::OUString(aDBData.sDataSource); 1666cdf0e10cSrcweir pValues[1].Value <<= rtl::OUString(aDBData.sCommand); 1667cdf0e10cSrcweir pValues[2].Value <<= aDBData.nCommandType; 1668cdf0e10cSrcweir pValues[3].Value <<= rtl::OUString(aEdDbText.GetText()); 1669cdf0e10cSrcweir 1670cdf0e10cSrcweir String sTmp; 1671cdf0e10cSrcweir for( sal_uInt16 n = 0, nCnt = aLbTableCol.GetEntryCount(); n < nCnt; ++n ) 1672cdf0e10cSrcweir ( sTmp += aLbTableCol.GetEntry( n ) ) += '\x0a'; 1673cdf0e10cSrcweir 1674cdf0e10cSrcweir if( sTmp.Len() ) 1675cdf0e10cSrcweir pValues[4].Value <<= rtl::OUString(sTmp); 1676cdf0e10cSrcweir 1677cdf0e10cSrcweir if( sNoTmpl != (sTmp = aLbDbParaColl.GetSelectEntry()) ) 1678cdf0e10cSrcweir pValues[5].Value <<= rtl::OUString(sTmp); 1679cdf0e10cSrcweir 1680cdf0e10cSrcweir if( pTAutoFmt ) 1681cdf0e10cSrcweir pValues[6].Value <<= rtl::OUString(pTAutoFmt->GetName()); 1682cdf0e10cSrcweir 1683cdf0e10cSrcweir const Type& rBoolType = ::getBooleanCppuType(); 1684cdf0e10cSrcweir sal_Bool bTmp = aRbAsTable.IsChecked(); 1685cdf0e10cSrcweir pValues[7].Value.setValue(&bTmp, rBoolType); 1686cdf0e10cSrcweir 1687cdf0e10cSrcweir bTmp = aRbAsField.IsChecked(); 1688cdf0e10cSrcweir pValues[8].Value.setValue(&bTmp, rBoolType); 1689cdf0e10cSrcweir 1690cdf0e10cSrcweir bTmp = aCbTableHeadon.IsChecked(); 1691cdf0e10cSrcweir pValues[9].Value.setValue(&bTmp, rBoolType); 1692cdf0e10cSrcweir 1693cdf0e10cSrcweir bTmp = aRbHeadlEmpty.IsChecked(); 1694cdf0e10cSrcweir pValues[10].Value.setValue(&bTmp, rBoolType); 1695cdf0e10cSrcweir 1696cdf0e10cSrcweir SetSetProperties(rtl::OUString(), aValues); 1697cdf0e10cSrcweir 1698cdf0e10cSrcweir sNewNode += C2U("/ColumnSet"); 1699cdf0e10cSrcweir String sDelim( String::CreateFromAscii( "/__" )); 1700cdf0e10cSrcweir 1701cdf0e10cSrcweir LanguageType ePrevLang = (LanguageType)-1; 1702cdf0e10cSrcweir rtl::OUString sPrevLang; 1703cdf0e10cSrcweir 1704cdf0e10cSrcweir SvNumberFormatter& rNFmtr = *pView->GetWrtShell().GetNumberFormatter(); 1705cdf0e10cSrcweir for(sal_uInt16 nCol = 0; nCol < aDBColumns.Count(); nCol++) 1706cdf0e10cSrcweir { 1707cdf0e10cSrcweir rtl::OUString sColumnNode = sNewNode; 1708cdf0e10cSrcweir SwInsDBColumn* pColumn = aDBColumns[nCol]; 1709cdf0e10cSrcweir String sColumnInsertNode(sColumnNode); 1710cdf0e10cSrcweir sColumnInsertNode += sDelim; 1711cdf0e10cSrcweir if( nCol < 100 ) 1712cdf0e10cSrcweir sColumnInsertNode += '0'; 1713cdf0e10cSrcweir if( nCol < 10 ) 1714cdf0e10cSrcweir sColumnInsertNode += '0'; 1715cdf0e10cSrcweir sColumnInsertNode += String::CreateFromInt32( nCol ); 1716cdf0e10cSrcweir 1717cdf0e10cSrcweir Sequence <rtl::OUString> aSubNodeNames = lcl_CreateSubNames(sColumnInsertNode); 1718cdf0e10cSrcweir Sequence<PropertyValue> aSubValues(aSubNodeNames.getLength()); 1719cdf0e10cSrcweir PropertyValue* pSubValues = aSubValues.getArray(); 1720cdf0e10cSrcweir const rtl::OUString* pSubNodeNames = aSubNodeNames.getConstArray(); 1721cdf0e10cSrcweir sal_Int32 i; 1722cdf0e10cSrcweir 1723cdf0e10cSrcweir for( i = 0; i < aSubNodeNames.getLength(); i++) 1724cdf0e10cSrcweir pSubValues[i].Name = pSubNodeNames[i]; 1725cdf0e10cSrcweir pSubValues[0].Value <<= pColumn->sColumn; 1726cdf0e10cSrcweir pSubValues[1].Value <<= i; 1727cdf0e10cSrcweir 1728cdf0e10cSrcweir sal_Bool bVal = pColumn->bHasFmt; 1729cdf0e10cSrcweir pSubValues[2].Value.setValue(&bVal, rBoolType); 1730cdf0e10cSrcweir bVal = pColumn->bIsDBFmt; 1731cdf0e10cSrcweir pSubValues[3].Value.setValue(&bVal, rBoolType); 1732cdf0e10cSrcweir 1733cdf0e10cSrcweir SwStyleNameMapper::FillUIName( RES_POOLCOLL_STANDARD, sTmp ); 1734cdf0e10cSrcweir const SvNumberformat* pNF = rNFmtr.GetEntry( pColumn->nUsrNumFmt ); 1735cdf0e10cSrcweir LanguageType eLang; 1736cdf0e10cSrcweir if( pNF ) 1737cdf0e10cSrcweir { 1738cdf0e10cSrcweir pSubValues[4].Value <<= rtl::OUString(pNF->GetFormatstring()); 1739cdf0e10cSrcweir eLang = pNF->GetLanguage(); 1740cdf0e10cSrcweir } 1741cdf0e10cSrcweir else 1742cdf0e10cSrcweir { 1743cdf0e10cSrcweir pSubValues[4].Value <<= rtl::OUString(sTmp); 1744cdf0e10cSrcweir eLang = (LanguageType)GetAppLanguage(); 1745cdf0e10cSrcweir } 1746cdf0e10cSrcweir 1747cdf0e10cSrcweir if( eLang != ePrevLang ) 1748cdf0e10cSrcweir { 1749cdf0e10cSrcweir Locale aLocale; 1750cdf0e10cSrcweir aLocale = SvxLanguageToLocale( aLocale, eLang ); 1751cdf0e10cSrcweir (( sPrevLang = aLocale.Country ) += rtl::OUString( '-' )) += aLocale.Language; 1752cdf0e10cSrcweir ePrevLang = eLang; 1753cdf0e10cSrcweir } 1754cdf0e10cSrcweir 1755cdf0e10cSrcweir pSubValues[5].Value <<= sPrevLang; 1756cdf0e10cSrcweir SetSetProperties(sColumnNode, aSubValues); 1757cdf0e10cSrcweir } 1758cdf0e10cSrcweir } 1759cdf0e10cSrcweir /* -----------------------------05.12.00 15:00-------------------------------- 1760cdf0e10cSrcweir 1761cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 1762cdf0e10cSrcweir void SwInsertDBColAutoPilot::Load() 1763cdf0e10cSrcweir { 1764cdf0e10cSrcweir Sequence <rtl::OUString> aNames = GetNodeNames(rtl::OUString()); 1765cdf0e10cSrcweir const rtl::OUString* pNames = aNames.getArray(); 1766cdf0e10cSrcweir SvNumberFormatter& rNFmtr = *pView->GetWrtShell().GetNumberFormatter(); 1767cdf0e10cSrcweir for(sal_Int32 nNode = 0; nNode < aNames.getLength(); nNode++) 1768cdf0e10cSrcweir { 1769cdf0e10cSrcweir //search for entries with the appropriate data source and table 1770cdf0e10cSrcweir Sequence<rtl::OUString> aSourceNames = lcl_createSourceNames(pNames[nNode]); 1771cdf0e10cSrcweir 1772cdf0e10cSrcweir Sequence< Any> aDataSourceProps = GetProperties(aSourceNames); 1773cdf0e10cSrcweir const Any* pDataSourceProps = aDataSourceProps.getConstArray(); 1774cdf0e10cSrcweir rtl::OUString sSource, sCommand; 1775cdf0e10cSrcweir sal_Int16 nCommandType; 1776cdf0e10cSrcweir pDataSourceProps[0] >>= sSource; 1777cdf0e10cSrcweir pDataSourceProps[1] >>= sCommand; 1778cdf0e10cSrcweir pDataSourceProps[2] >>= nCommandType; 1779cdf0e10cSrcweir if(sSource.equals(aDBData.sDataSource) && sCommand.equals(aDBData.sCommand)) 1780cdf0e10cSrcweir { 1781cdf0e10cSrcweir _DB_ColumnConfigData* pNewData = new _DB_ColumnConfigData; 1782cdf0e10cSrcweir pNewData->sSource = sSource; 1783cdf0e10cSrcweir pNewData->sTable = sCommand; 1784cdf0e10cSrcweir 1785cdf0e10cSrcweir pDataSourceProps[3] >>= pNewData->sEdit; 1786cdf0e10cSrcweir pDataSourceProps[4] >>= pNewData->sTblList; 1787cdf0e10cSrcweir pDataSourceProps[5] >>= pNewData->sTmplNm; 1788cdf0e10cSrcweir pDataSourceProps[6] >>= pNewData->sTAutoFmtNm; 1789cdf0e10cSrcweir if(pDataSourceProps[7].hasValue()) 1790cdf0e10cSrcweir pNewData->bIsTable = *(sal_Bool*)pDataSourceProps[7].getValue(); 1791cdf0e10cSrcweir if(pDataSourceProps[8].hasValue()) 1792cdf0e10cSrcweir pNewData->bIsField = *(sal_Bool*)pDataSourceProps[8].getValue(); 1793cdf0e10cSrcweir if(pDataSourceProps[9].hasValue()) 1794cdf0e10cSrcweir pNewData->bIsHeadlineOn = *(sal_Bool*)pDataSourceProps[9].getValue(); 1795cdf0e10cSrcweir if(pDataSourceProps[10].hasValue()) 1796cdf0e10cSrcweir pNewData->bIsEmptyHeadln = *(sal_Bool*)pDataSourceProps[10].getValue(); 1797cdf0e10cSrcweir 1798cdf0e10cSrcweir rtl::OUString sSubNodeName(pNames[nNode]); 1799cdf0e10cSrcweir sSubNodeName += C2U("/ColumnSet/"); 1800cdf0e10cSrcweir Sequence <rtl::OUString> aSubNames = GetNodeNames(sSubNodeName); 1801cdf0e10cSrcweir const rtl::OUString* pSubNames = aSubNames.getConstArray(); 1802cdf0e10cSrcweir for(sal_Int32 nSub = 0; nSub < aSubNames.getLength(); nSub++) 1803cdf0e10cSrcweir { 1804cdf0e10cSrcweir rtl::OUString sSubSubNodeName(sSubNodeName); 1805cdf0e10cSrcweir sSubSubNodeName += pSubNames[nSub]; 1806cdf0e10cSrcweir Sequence <rtl::OUString> aSubNodeNames = lcl_CreateSubNames(sSubSubNodeName); 1807cdf0e10cSrcweir Sequence< Any> aSubProps = GetProperties(aSubNodeNames); 1808cdf0e10cSrcweir const Any* pSubProps = aSubProps.getConstArray(); 1809cdf0e10cSrcweir 1810cdf0e10cSrcweir rtl::OUString sColumn; 1811cdf0e10cSrcweir pSubProps[0] >>= sColumn; 1812cdf0e10cSrcweir //check for existance of the loaded column name 1813cdf0e10cSrcweir sal_Bool bFound = sal_False; 1814cdf0e10cSrcweir for(sal_Int32 nRealColumn = 0; nRealColumn < aDBColumns.Count(); nRealColumn++) 1815cdf0e10cSrcweir { 1816cdf0e10cSrcweir if(aDBColumns[(sal_uInt16)nRealColumn]->sColumn == sColumn) 1817cdf0e10cSrcweir { 1818cdf0e10cSrcweir bFound = sal_True; 1819cdf0e10cSrcweir break; 1820cdf0e10cSrcweir } 1821cdf0e10cSrcweir } 1822cdf0e10cSrcweir if(!bFound) 1823cdf0e10cSrcweir continue; 1824cdf0e10cSrcweir sal_Int16 nIndex = 0; 1825cdf0e10cSrcweir pSubProps[1] >>= nIndex; 1826cdf0e10cSrcweir SwInsDBColumnPtr pInsDBColumn = new SwInsDBColumn(sColumn, nIndex); 1827cdf0e10cSrcweir if(pSubProps[2].hasValue()) 1828cdf0e10cSrcweir pInsDBColumn->bHasFmt = *(sal_Bool*)pSubProps[2].getValue(); 1829cdf0e10cSrcweir if(pSubProps[3].hasValue()) 1830cdf0e10cSrcweir pInsDBColumn->bIsDBFmt = *(sal_Bool*)pSubProps[3].getValue(); 1831cdf0e10cSrcweir 1832cdf0e10cSrcweir pSubProps[4] >>= pInsDBColumn->sUsrNumFmt; 1833cdf0e10cSrcweir rtl::OUString sNumberFormatLocale; 1834cdf0e10cSrcweir pSubProps[5] >>= sNumberFormatLocale; 1835cdf0e10cSrcweir 1836cdf0e10cSrcweir Locale aLocale; 1837cdf0e10cSrcweir aLocale.Language = sNumberFormatLocale.copy(0, 2); 1838cdf0e10cSrcweir aLocale.Country = sNumberFormatLocale.copy(3, 2); 1839cdf0e10cSrcweir pInsDBColumn->eUsrNumFmtLng = SvxLocaleToLanguage( aLocale ); 1840cdf0e10cSrcweir 1841cdf0e10cSrcweir pInsDBColumn->nUsrNumFmt = rNFmtr.GetEntryKey( pInsDBColumn->sUsrNumFmt, 1842cdf0e10cSrcweir pInsDBColumn->eUsrNumFmtLng ); 1843cdf0e10cSrcweir 1844cdf0e10cSrcweir // pInsDBColumn->nDBNumFmt 1845cdf0e10cSrcweir 1846cdf0e10cSrcweir pNewData->aDBColumns.Insert(pInsDBColumn); 1847cdf0e10cSrcweir } 1848cdf0e10cSrcweir sal_uInt16 n = 0; 1849cdf0e10cSrcweir String sTmp( pNewData->sTblList ); 1850cdf0e10cSrcweir if( sTmp.Len() ) 1851cdf0e10cSrcweir { 1852cdf0e10cSrcweir do { 1853cdf0e10cSrcweir String sEntry( sTmp.GetToken( 0, '\x0a', n ) ); 1854cdf0e10cSrcweir //preselect column - if they still exist! 1855cdf0e10cSrcweir if(aLbTblDbColumn.GetEntryPos(sEntry) != LISTBOX_ENTRY_NOTFOUND) 1856cdf0e10cSrcweir { 1857cdf0e10cSrcweir aLbTableCol.InsertEntry( sEntry ); 1858cdf0e10cSrcweir aLbTblDbColumn.RemoveEntry( sEntry ); 1859cdf0e10cSrcweir } 1860cdf0e10cSrcweir } while( n < sTmp.Len() ); 1861cdf0e10cSrcweir 1862cdf0e10cSrcweir if( !aLbTblDbColumn.GetEntryCount() ) 1863cdf0e10cSrcweir { 1864cdf0e10cSrcweir aIbDbcolAllTo.Enable( sal_False ); 1865cdf0e10cSrcweir aIbDbcolOneTo.Enable( sal_False ); 1866cdf0e10cSrcweir } 1867cdf0e10cSrcweir aIbDbcolOneFrom.Enable( sal_True ); 1868cdf0e10cSrcweir aIbDbcolAllFrom.Enable( sal_True ); 1869cdf0e10cSrcweir } 1870cdf0e10cSrcweir aEdDbText.SetText( pNewData->sEdit ); 1871cdf0e10cSrcweir 1872cdf0e10cSrcweir sTmp = pNewData->sTmplNm; 1873cdf0e10cSrcweir if( sTmp.Len() ) 1874cdf0e10cSrcweir aLbDbParaColl.SelectEntry( sTmp ); 1875cdf0e10cSrcweir else 1876cdf0e10cSrcweir aLbDbParaColl.SelectEntryPos( 0 ); 1877cdf0e10cSrcweir 1878cdf0e10cSrcweir if( pTAutoFmt ) 1879cdf0e10cSrcweir delete pTAutoFmt, pTAutoFmt = 0; 1880cdf0e10cSrcweir sTmp = pNewData->sTAutoFmtNm; 1881cdf0e10cSrcweir if( sTmp.Len() ) 1882cdf0e10cSrcweir { 1883cdf0e10cSrcweir // dann erstmal die AutoFmt-Datei laden und das Autoformat suchen 1884cdf0e10cSrcweir SwTableAutoFmtTbl aAutoFmtTbl; 1885cdf0e10cSrcweir aAutoFmtTbl.Load(); 1886cdf0e10cSrcweir for( sal_uInt16 nAutoFmt = aAutoFmtTbl.Count(); nAutoFmt; ) 1887cdf0e10cSrcweir if( sTmp == aAutoFmtTbl[ --nAutoFmt ]->GetName() ) 1888cdf0e10cSrcweir { 1889cdf0e10cSrcweir pTAutoFmt = new SwTableAutoFmt( *aAutoFmtTbl[ nAutoFmt ] ); 1890cdf0e10cSrcweir break; 1891cdf0e10cSrcweir } 1892cdf0e10cSrcweir } 1893cdf0e10cSrcweir 1894cdf0e10cSrcweir aRbAsTable.Check( pNewData->bIsTable ); 1895cdf0e10cSrcweir aRbAsField.Check( pNewData->bIsField ); 1896cdf0e10cSrcweir aRbAsText.Check( !pNewData->bIsTable && !pNewData->bIsField ); 1897cdf0e10cSrcweir 1898cdf0e10cSrcweir aCbTableHeadon.Check( pNewData->bIsHeadlineOn ); 1899cdf0e10cSrcweir aRbHeadlColnms.Check( !pNewData->bIsEmptyHeadln ); 1900cdf0e10cSrcweir aRbHeadlEmpty.Check( pNewData->bIsEmptyHeadln ); 1901cdf0e10cSrcweir HeaderHdl(&aCbTableHeadon); 1902cdf0e10cSrcweir 1903cdf0e10cSrcweir // jetzt noch die benutzerdefinierten Numberformat Strings in die 1904cdf0e10cSrcweir // Shell kopieren. Nur diese sind dann als ID verfuegbar 1905cdf0e10cSrcweir for( n = 0; n < aDBColumns.Count() ; ++n ) 1906cdf0e10cSrcweir { 1907cdf0e10cSrcweir SwInsDBColumn& rSet = *aDBColumns[ n ]; 1908cdf0e10cSrcweir for( sal_uInt16 m = 0; m < pNewData->aDBColumns.Count() ; ++m ) 1909cdf0e10cSrcweir { 1910cdf0e10cSrcweir SwInsDBColumn& rGet = *pNewData->aDBColumns[ m ]; 1911cdf0e10cSrcweir if(rGet.sColumn == rSet.sColumn) 1912cdf0e10cSrcweir { 1913cdf0e10cSrcweir if( rGet.bHasFmt && !rGet.bIsDBFmt ) 1914cdf0e10cSrcweir { 1915cdf0e10cSrcweir rSet.bIsDBFmt = sal_False; 1916cdf0e10cSrcweir rSet.nUsrNumFmt = rNFmtr.GetEntryKey( rGet.sUsrNumFmt, 1917cdf0e10cSrcweir rGet.eUsrNumFmtLng ); 1918cdf0e10cSrcweir if( NUMBERFORMAT_ENTRY_NOT_FOUND == rSet.nUsrNumFmt ) 1919cdf0e10cSrcweir { 1920cdf0e10cSrcweir xub_StrLen nCheckPos; 1921cdf0e10cSrcweir short nType; 1922cdf0e10cSrcweir String sTmpFmt = rGet.sUsrNumFmt; 1923cdf0e10cSrcweir rNFmtr.PutEntry( sTmpFmt, nCheckPos, nType, 1924cdf0e10cSrcweir rSet.nUsrNumFmt, rGet.eUsrNumFmtLng ); 1925cdf0e10cSrcweir rGet.sUsrNumFmt = sTmpFmt; 1926cdf0e10cSrcweir } 1927cdf0e10cSrcweir } 1928cdf0e10cSrcweir break; 1929cdf0e10cSrcweir } 1930cdf0e10cSrcweir } 1931cdf0e10cSrcweir } 1932cdf0e10cSrcweir 1933cdf0e10cSrcweir // steht der Cursor in einer Tabelle, darf NIE Tabelle auswaehlbar sein 1934cdf0e10cSrcweir if( !aRbAsTable.IsEnabled() && aRbAsTable.IsChecked() ) 1935cdf0e10cSrcweir aRbAsField.Check( sal_True ); 1936cdf0e10cSrcweir delete pNewData; 1937cdf0e10cSrcweir break; 1938cdf0e10cSrcweir } 1939cdf0e10cSrcweir } 1940cdf0e10cSrcweir } 1941cdf0e10cSrcweir 1942