25 #include <com/sun/star/container/XNameAccess.hpp>
26 #include <com/sun/star/sdbc/XDataSource.hpp>
27 #include <com/sun/star/sdbc/XRow.hpp>
28 #include <com/sun/star/sdbcx/XColumnsSupplier.hpp>
29 #include <com/sun/star/sdbcx/XRowLocate.hpp>
30 #include <com/sun/star/sdb/XQueriesSupplier.hpp>
31 #include <com/sun/star/sdb/XColumn.hpp>
32 #include <com/sun/star/sdbc/DataType.hpp>
33 #include <com/sun/star/beans/XPropertySet.hpp>
34 #include <com/sun/star/util/NumberFormatter.hpp>
35 #include <com/sun/star/util/XNumberFormatTypes.hpp>
53 #include <uiitems.hxx>
74 #include <strings.hrc>
80 #include <string_view>
116 pText(new OUString(rText)),
143 struct DB_ColumnConfigData
149 OUString sTAutoFormatNm;
155 DB_ColumnConfigData(DB_ColumnConfigData
const&) =
delete;
156 DB_ColumnConfigData& operator=(DB_ColumnConfigData
const&) =
delete;
158 DB_ColumnConfigData()
160 bIsTable = bIsHeadlineOn =
true;
161 bIsField = bIsEmptyHeadln =
false;
174 Reference<sdbcx::XColumnsSupplier>
const & xColSupp,
179 , sNoTmpl(
SwResId(SW_STR_NONE))
181 , m_xRbAsTable(m_xBuilder->weld_radio_button(
"astable"))
182 , m_xRbAsField(m_xBuilder->weld_radio_button(
"asfields"))
183 , m_xRbAsText(m_xBuilder->weld_radio_button(
"astext"))
184 , m_xHeadFrame(m_xBuilder->weld_frame(
"dbframe"))
185 , m_xLbTableDbColumn(m_xBuilder->weld_tree_view(
"tabledbcols"))
186 , m_xLbTextDbColumn(m_xBuilder->weld_tree_view(
"tabletxtcols"))
187 , m_xFormatFrame(m_xBuilder->weld_frame(
"formatframe"))
188 , m_xRbDbFormatFromDb(m_xBuilder->weld_radio_button(
"fromdatabase"))
189 , m_xRbDbFormatFromUsr(m_xBuilder->weld_radio_button(
"userdefined"))
190 , m_xLbDbFormatFromUsr(new
NumFormatListBox(m_xBuilder->weld_combo_box(
"numformat")))
191 , m_xIbDbcolToEdit(m_xBuilder->weld_button(
"toedit"))
192 , m_xEdDbText(m_xBuilder->weld_text_view(
"textview"))
193 , m_xFtDbParaColl(m_xBuilder->weld_label(
"parastylelabel"))
194 , m_xLbDbParaColl(m_xBuilder->weld_combo_box(
"parastyle"))
195 , m_xIbDbcolAllTo(m_xBuilder->weld_button(
"oneright"))
196 , m_xIbDbcolOneTo(m_xBuilder->weld_button(
"allright"))
197 , m_xIbDbcolOneFrom(m_xBuilder->weld_button(
"oneleft"))
198 , m_xIbDbcolAllFrom(m_xBuilder->weld_button(
"allleft"))
199 , m_xFtTableCol(m_xBuilder->weld_label(
"tablecolft"))
200 , m_xLbTableCol(m_xBuilder->weld_tree_view(
"tablecols"))
201 , m_xCbTableHeadon(m_xBuilder->weld_check_button(
"tableheading"))
202 , m_xRbHeadlColnms(m_xBuilder->weld_radio_button(
"columnname"))
203 , m_xRbHeadlEmpty(m_xBuilder->weld_radio_button(
"rowonly"))
204 , m_xPbTableFormat(m_xBuilder->weld_button(
"tableformat"))
205 , m_xPbTableAutofmt(m_xBuilder->weld_button(
"autoformat"))
217 Reference< util::XNumberFormats > xDocNumberFormats = pNumFormat->getNumberFormats();
218 Reference< util::XNumberFormatTypes > xDocNumberFormatTypes(xDocNumberFormats, UNO_QUERY);
221 Reference< util::XNumberFormats > xNumberFormats;
222 if(xSourceProps.is())
224 Any aFormats = xSourceProps->getPropertyValue(
"NumberFormatsSupplier");
225 if(aFormats.hasValue())
227 Reference< util::XNumberFormatsSupplier> xSuppl;
231 xNumberFormats = xSuppl->getNumberFormats( );
237 for (
const OUString& rColName : aColNames)
239 std::unique_ptr<SwInsDBColumn> pNew(
new SwInsDBColumn( rColName ));
240 Any aCol = xCols->getByName(rColName);
243 Any aType = xCol->getPropertyValue(
"Type");
244 sal_Int32 eDataType = 0;
249 case DataType::BOOLEAN:
250 case DataType::TINYINT:
251 case DataType::SMALLINT:
252 case DataType::INTEGER:
253 case DataType::BIGINT:
254 case DataType::FLOAT:
256 case DataType::DOUBLE:
257 case DataType::NUMERIC:
258 case DataType::DECIMAL:
261 case DataType::TIMESTAMP:
263 pNew->bHasFormat =
true;
264 Any aFormat = xCol->getPropertyValue(
"FormatKey");
265 if(aFormat.hasValue())
267 sal_Int32 nFormat = 0;
269 if(xNumberFormats.is())
274 Any aFormatVal = xNumProps->getPropertyValue(
"FormatString");
275 Any aLocale = xNumProps->getPropertyValue(
"Locale");
277 aFormatVal >>= sFormat;
280 sal_Int32 nKey = xDocNumberFormats->queryKey( sFormat, aLoc,
true);
283 nKey = xDocNumberFormats->addNew( sFormat, aLoc );
285 pNew->nDBNumFormat = nKey;
289 OSL_FAIL(
"illegal number format key");
304 OSL_ENSURE(
false,
"Spaltenname mehrfach vergeben?" );
318 pBase = pPool->
Next();
393 if (!rButton.get_active())
396 bool bShowTable = m_xRbAsTable->get_active();
401 m_xLbTextDbColumn->set_visible( !bShowTable );
402 m_xIbDbcolToEdit->set_visible( !bShowTable );
403 m_xEdDbText->set_visible( !bShowTable );
404 m_xFtDbParaColl->set_visible( !bShowTable );
405 m_xLbDbParaColl->set_visible( !bShowTable );
407 m_xLbTableDbColumn->set_visible( bShowTable );
408 m_xIbDbcolAllTo->set_visible( bShowTable );
409 m_xIbDbcolOneTo->set_visible( bShowTable );
410 m_xIbDbcolOneFrom->set_visible( bShowTable );
411 m_xIbDbcolAllFrom->set_visible( bShowTable );
412 m_xFtTableCol->set_visible( bShowTable );
413 m_xLbTableCol->set_visible( bShowTable );
414 m_xCbTableHeadon->set_visible( bShowTable );
415 m_xRbHeadlColnms->set_visible( bShowTable );
416 m_xRbHeadlEmpty->set_visible( bShowTable );
417 m_xPbTableFormat->set_visible( bShowTable );
418 m_xPbTableAutofmt->set_visible( bShowTable );
421 m_xPbTableFormat->set_sensitive( 0 != m_xLbTableCol->n_children() );
423 TVSelectHdl( bShowTable ? *m_xLbTableDbColumn : *m_xLbTextDbColumn );
428 if (!rButton.get_active())
432 ? ( m_xLbTableCol->get_id(0).isEmpty()
433 ? *m_xLbTableDbColumn
435 : *m_xLbTextDbColumn;
440 bool bFromDB = m_xRbDbFormatFromDb->get_active();
442 m_xLbDbFormatFromUsr->set_sensitive( !bFromDB );
447 bool bChgEnable =
true, bEnableTo =
true, bEnableFrom =
true;
449 if( &rButton == m_xIbDbcolAllTo.get() )
453 sal_Int32
n, nInsPos = m_xLbTableCol->get_selected_index(),
454 nCnt = m_xLbTableDbColumn->n_children();
456 m_xLbTableDbColumn->unselect_all();
458 m_xLbTableDbColumn->freeze();
459 m_xLbTableCol->freeze();
462 for( n = 0; n < nCnt; ++n )
463 m_xLbTableCol->append_text(m_xLbTableDbColumn->get_text(n));
465 for( n = 0; n < nCnt; ++n, ++nInsPos )
466 m_xLbTableCol->insert_text(nInsPos, m_xLbTableDbColumn->get_text(n));
467 m_xLbTableDbColumn->clear();
469 m_xLbTableDbColumn->thaw();
470 m_xLbTableCol->thaw();
472 m_xLbTableCol->select(nInsPos);
474 else if( &rButton == m_xIbDbcolOneTo.get() &&
475 m_xLbTableDbColumn->get_selected_index() != -1 )
477 sal_Int32 nInsPos = m_xLbTableCol->get_selected_index(),
478 nDelPos = m_xLbTableDbColumn->get_selected_index();
479 m_xLbTableCol->insert_text(nInsPos, m_xLbTableDbColumn->get_text(nDelPos));
480 m_xLbTableDbColumn->remove(nDelPos);
482 m_xLbTableCol->select(nInsPos);
483 if (nDelPos >= m_xLbTableDbColumn->n_children())
484 nDelPos = m_xLbTableDbColumn->n_children() - 1;
485 m_xLbTableDbColumn->select(nDelPos);
487 bEnableTo = 0 != m_xLbTableDbColumn->n_children();
489 else if( &rButton == m_xIbDbcolOneFrom.get() )
491 if (m_xLbTableCol->get_selected_index() != -1)
494 nDelPos = m_xLbTableCol->get_selected_index();
499 if( it == aDBColumns.begin() || (it+1) == aDBColumns.end() )
500 nInsPos = it - aDBColumns.begin();
504 while( ++it != aDBColumns.end() &&
505 -1 == (nInsPos = m_xLbTableDbColumn->
506 find_text( (*it)->sColumn )) )
510 m_xLbTableDbColumn->insert_text(nInsPos, aSrch.sColumn);
511 m_xLbTableCol->remove( nDelPos );
513 if (nInsPos >= m_xLbTableDbColumn->n_children())
514 nInsPos = m_xLbTableDbColumn->n_children() - 1;
515 m_xLbTableDbColumn->select(nInsPos);
517 if (nDelPos >= m_xLbTableCol->n_children())
518 nDelPos = m_xLbTableCol->n_children() - 1;
519 m_xLbTableCol->select(nDelPos);
522 bEnableTo = 0 != m_xLbTableDbColumn->n_children();
524 bEnableFrom = 0 != m_xLbTableCol->n_children();
526 else if( &rButton == m_xIbDbcolAllFrom.get() )
530 m_xLbTableDbColumn->freeze();
531 m_xLbTableCol->freeze();
533 m_xLbTableDbColumn->clear();
534 m_xLbTableCol->clear();
535 for (
size_t n = 0;
n < aDBColumns.size(); ++
n)
536 m_xLbTableDbColumn->append_text(aDBColumns[
n]->sColumn);
538 m_xLbTableDbColumn->thaw();
539 m_xLbTableCol->thaw();
541 m_xLbTableDbColumn->select(0);
543 else if( &rButton == m_xIbDbcolToEdit.get() )
547 OUString aField(m_xLbTextDbColumn->get_selected_text());
548 if( !aField.isEmpty() )
550 OUString
aStr( m_xEdDbText->get_text() );
551 int nStartPos, nEndPos;
552 m_xEdDbText->get_selection_bounds(nStartPos, nEndPos);
554 sal_Int32 nMax = std::max(nStartPos, nEndPos);
555 const sal_Int32 nSel = nMax - nPos;
558 aStr =
aStr.replaceAt( nPos, nSel,
u"" );
561 if( !
aStr.isEmpty() )
566 if(
'\n' != c &&
'\r' != c )
567 aField =
" " + aField;
569 if( nPos <
aStr.getLength() )
572 if(
'\n' != c &&
'\r' != c )
577 m_xEdDbText->set_text(
aStr.replaceAt( nPos, 0, aField ) );
578 nPos += aField.getLength();
579 m_xEdDbText->select_region(nPos, nPos);
586 m_xIbDbcolOneTo->set_sensitive( bEnableTo );
587 m_xIbDbcolAllTo->set_sensitive( bEnableTo );
588 m_xIbDbcolOneFrom->set_sensitive( bEnableFrom );
589 m_xIbDbcolAllFrom->set_sensitive( bEnableFrom );
591 m_xRbDbFormatFromDb->set_sensitive(
false );
592 m_xRbDbFormatFromUsr->set_sensitive(
false );
593 m_xLbDbFormatFromUsr->set_sensitive(
false );
595 m_xPbTableFormat->set_sensitive( bEnableFrom );
601 if( &rBox == m_xLbTextDbColumn.get() )
602 pButton = m_xIbDbcolToEdit.get();
603 else if( &rBox == m_xLbTableDbColumn.get() && m_xIbDbcolOneTo->get_sensitive() )
604 pButton = m_xIbDbcolOneTo.get();
605 else if( &rBox == m_xLbTableCol.get() && m_xIbDbcolOneFrom->get_sensitive() )
606 pButton = m_xIbDbcolOneFrom.get();
609 TableToFromHdl(*pButton);
617 bool bNewSet =
false;
631 pTableSet->Put( aBrush );
632 aBrush.SetWhich(SID_ATTR_BRUSH_ROW);
633 pTableSet->Put( aBrush );
634 aBrush.SetWhich(SID_ATTR_BRUSH_TABLE);
635 pTableSet->Put( aBrush );
647 aBoxInfo.
SetValid( SvxBoxInfoItemValidFlags::DISABLE );
648 pTableSet->Put( aBoxInfo );
664 for( sal_uInt16
i = 0;
i < nNum; ++
i )
667 nStart1 = pCol->
GetLeft() + nWidth1;
671 if(nStart1 || nEnd1 != nWidth)
672 nWidth = nEnd1 - nStart1;
685 pRep->SetSpace( nWidth );
686 pRep->SetWidth( nWidth );
687 pRep->SetWidthPercent( 100 );
694 sal_Int32 nCols = m_xLbTableCol->n_children();
695 if (nCols != pRep->GetAllColCount() && nCols > 0)
705 const sal_Int32 nStep = nWidth / (nCols+1);
706 for( sal_Int32
n = 0;
n < nCols; ++
n )
708 aTabCols.
Insert( nStep*(
n+1),
false,
n );
713 pRep->SetSpace( nWidth );
714 pRep->SetWidth( nWidth );
715 pRep->SetWidthPercent( 100 );
722 if(
RET_OK == pDlg->Execute() )
749 OUString sText( m_xFormatFrame->get_label().copy( 0, nGBFormatLen ));
750 if( aSrch.sColumn.isEmpty() )
752 m_xRbDbFormatFromDb->set_sensitive(
false );
753 m_xRbDbFormatFromUsr->set_sensitive(
false );
754 m_xLbDbFormatFromUsr->set_sensitive(
false );
759 m_xRbDbFormatFromDb->set_sensitive( bEnableFormat );
760 m_xRbDbFormatFromUsr->set_sensitive( bEnableFormat );
764 sText +=
" (" + aSrch.sColumn +
")";
767 bool bIsDBFormat = (*it)->bIsDBFormat;
768 m_xRbDbFormatFromDb->set_active( bIsDBFormat );
769 m_xRbDbFormatFromUsr->set_active( !bIsDBFormat );
770 m_xLbDbFormatFromUsr->set_sensitive( !bIsDBFormat );
772 m_xLbDbFormatFromUsr->SetDefFormat( (*it)->nUsrNumFormat );
775 m_xFormatFrame->set_label(sText);
777 if (m_xLbTableCol->n_children())
781 if (&rBox == m_xLbTableCol.get())
782 m_xLbTableCol->set_id(0,
"tablecols");
784 m_xLbTableCol->set_id(0, OUString());
791 ? ( m_xLbTableCol->get_id(0).isEmpty()
792 ? m_xLbTableDbColumn.get()
793 : m_xLbTableCol.get() )
794 : m_xLbTextDbColumn.get();
799 if( !aSrch.sColumn.isEmpty() )
801 m_xLbDbFormatFromUsr->CallSelectHdl();
808 bool bEnable = m_xCbTableHeadon->get_active();
809 m_xRbHeadlColnms->set_sensitive( bEnable );
810 m_xRbHeadlEmpty->set_sensitive( bEnable );
815 sal_Int32 nSttPos = 0, nFndPos;
816 while( -1 != ( nFndPos = rText.indexOf(
'\x0A', nSttPos )) )
820 rColArr.push_back(std::make_unique<DB_Column>(rText.copy(nSttPos, nFndPos -1)));
822 rColArr.push_back(std::make_unique<DB_Column>());
823 nSttPos = nFndPos + 1;
825 if( nSttPos < rText.getLength() )
827 rColArr.push_back(std::make_unique<DB_Column>(rText.copy(nSttPos)));
838 OUString sText( rText );
839 sal_Int32 nFndPos, nEndPos, nSttPos = 0;
841 while( -1 != ( nFndPos = sText.indexOf(
cDBFieldStart, nSttPos )))
843 nSttPos = nFndPos + 1;
848 SwInsDBColumn aSrch( sText.copy( nSttPos, nEndPos - nSttPos ));
861 sText = sText.copy( nSttPos-1 );
864 sText = sText.copy( rFndCol.
sColumn.getLength() + 2 );
867 sal_uInt16 nSubType = 0;
872 nFormat =
static_cast<sal_uInt32
>(rFndCol.
nDBNumFormat);
894 pNew =
new DB_Column( rFndCol, nFormat );
896 rColArr.push_back( std::unique_ptr<DB_Column>(pNew) );
902 if( !sText.isEmpty() )
905 return !rColArr.empty();
911 Reference< sdbc::XResultSet >
const & xResultSet_in )
913 auto xResultSet = xResultSet_in;
915 const Any* pSelection = rSelection.hasElements() ? rSelection.getConstArray() :
nullptr;
919 bool bDisposeResultSet =
false;
921 if ( !xResultSet.is() )
924 bDisposeResultSet = xResultSet.is();
927 Reference< sdbc::XRow >
xRow(xResultSet, UNO_QUERY);
942 std::unique_ptr<SwWait> pWait;
944 Reference< XColumnsSupplier > xColsSupp( xResultSet, UNO_QUERY );
947 uno::Reference<sdbcx::XRowLocate> xRowLocate(xResultSet, uno::UNO_QUERY_THROW);
960 nRows += rSelection.getLength();
965 std::vector<SwInsDBColumn*> aColFields;
966 for( sal_Int32
n = 0;
n < nCols; ++
n )
971 aColFields.push_back(it->get());
973 OSL_ENSURE(
false,
"database column not found" );
977 if( static_cast<size_t>(nCols) != aColFields.size() )
979 OSL_ENSURE(
false,
"not all database columns found" );
980 nCols =
static_cast<sal_Int32
>(aColFields.size());
985 OSL_ENSURE(
false,
"wrong parameters" );
1006 for( sal_Int32
n = 0;
n < nCols; ++
n )
1010 rSh.SwEditShell::Insert2( aColFields[
n ]->sColumn );
1018 for( sal_Int32
i = 0 ; ; ++
i )
1020 bool bBreak =
false;
1025 bBreak = !xRowLocate->moveToBookmark(pSelection[
i]);
1028 bBreak = !xResultSet->first();
1037 for( sal_Int32
n = 0;
n < nCols; ++
n )
1048 xCols->getByName(pEntry->
sColumn) >>= xColumn;
1050 sal_Int32 eDataType = 0;
1051 if( xColumnProps.is() )
1053 Any aType = xColumnProps->getPropertyValue(
"Type");
1054 aType >>= eDataType;
1063 aTableSet.Put(aNumFormat);
1066 double fVal = xColumn->getDouble();
1067 if( xColumn->wasNull() )
1071 if(rNumFormatr.
GetType(aNumFormat.
GetValue()) & SvNumFormatType::DATE)
1073 ::Date aStandard(1,1,1900);
1085 else if( DataType::BINARY == eDataType ||
1086 DataType::VARBINARY == eDataType ||
1087 DataType::LONGVARBINARY== eDataType ||
1088 DataType::SQLNULL == eDataType ||
1089 DataType::OTHER == eDataType ||
1090 DataType::OBJECT == eDataType ||
1091 DataType::DISTINCT == eDataType ||
1092 DataType::STRUCT == eDataType ||
1093 DataType::ARRAY == eDataType ||
1094 DataType::BLOB == eDataType ||
1095 DataType::CLOB == eDataType ||
1096 DataType::REF == eDataType
1103 const OUString sVal = xColumn->getString();
1104 if(!xColumn->wasNull())
1106 rSh.SwEditShell::Insert2( sVal );
1118 if ( !xResultSet->next() )
1121 else if(
i+1 >= rSelection.getLength() )
1148 rSh.SwEditShell::SplitNode();
1151 rSh.SwEditShell::SplitNode();
1167 if( USHRT_MAX != nId )
1180 aDBFormatData.
xFormatter.set(util::NumberFormatter::create(xContext), UNO_QUERY_THROW) ;
1183 if(xSourceProps.is())
1185 Any aFormats = xSourceProps->getPropertyValue(
"NumberFormatsSupplier");
1186 if(aFormats.hasValue())
1188 Reference< util::XNumberFormatsSupplier> xSuppl;
1189 aFormats >>= xSuppl;
1193 Any aNull = xSettings->getPropertyValue(
"NullDate");
1196 aDBFormatData.
xFormatter->attachNumberFormatsSupplier(xSuppl);
1205 bool bSetCursor =
true;
1206 const size_t nCols = aColArr.size();
1208 for( sal_Int32
i = 0 ; ; ++
i )
1210 bool bBreak =
false;
1215 bBreak = !xRowLocate->moveToBookmark(pSelection[
i]);
1218 bBreak = !xResultSet->first();
1228 for(
size_t n = 0;
n < nCols; ++
n )
1235 sIns = *pDBCol->
pText;
1248 std::unique_ptr<SwDBField> pField(static_cast<SwDBField *>(
1259 if( DBL_MAX != nValue )
1261 Any aType = xColumnProps->getPropertyValue(
"Type");
1262 sal_Int32 eDataType = 0;
1263 aType >>= eDataType;
1264 if( DataType::DATE == eDataType || DataType::TIME == eDataType ||
1265 DataType::TIMESTAMP == eDataType)
1268 ::Date aStandard(1,1,1900);
1272 if(aStandard != aCompare)
1273 nValue += (aStandard - aCompare);
1275 pField->ChgValue( nValue,
true );
1277 pField->SetInitialized();
1298 ::Date aStandard(1,1,1900);
1300 nValue += (aStandard - rNumFormatr.
GetNullDate());
1310 if( !sIns.isEmpty() )
1320 rSh.SwCursorShell::MovePara(
1326 rSh.SwCursorShell::MovePara(
1335 bool bNext = xResultSet->next();
1339 else if(
i+1 >= rSelection.getLength() )
1346 rSh.SwEditShell::SplitNode();
1352 if( !bSetCursor && pMark !=
nullptr)
1374 if ( bDisposeResultSet )
1375 ::comphelper::disposeComponent(xResultSet);
1389 pTableSet->ClearItem( SID_ATTR_BORDER_INNER );
1394 pTableSet->ClearItem( SID_ATTR_BRUSH_ROW );
1395 pTableSet->ClearItem( SID_ATTR_BRUSH_TABLE );
1402 static const sal_uInt16 aIds[3] =
1404 for(sal_uInt16
i : aIds)
1405 if( SfxItemState::SET ==
pTableSet->GetItemState(
i,
1406 false, &pItem ) && *pItem == aBrush )
1427 OUString* pNames = aSourceNames.getArray();
1428 pNames[0] = OUString::Concat(rNodeName) +
"/DataSource";
1429 pNames[1] = OUString::Concat(rNodeName) +
"/Command";
1430 pNames[2] = OUString::Concat(rNodeName) +
"/CommandType";
1431 pNames[3] = OUString::Concat(rNodeName) +
"/ColumnsToText";
1432 pNames[4] = OUString::Concat(rNodeName) +
"/ColumnsToTable";
1433 pNames[5] = OUString::Concat(rNodeName) +
"/ParaStyle";
1434 pNames[6] = OUString::Concat(rNodeName) +
"/TableAutoFormat";
1435 pNames[7] = OUString::Concat(rNodeName) +
"/IsTable";
1436 pNames[8] = OUString::Concat(rNodeName) +
"/IsField";
1437 pNames[9] = OUString::Concat(rNodeName) +
"/IsHeadlineOn";
1438 pNames[10] = OUString::Concat(rNodeName) +
"/IsEmptyHeadline";
1439 return aSourceNames;
1446 OUString::Concat(rSubNodeName) +
"/ColumnName",
1447 OUString::Concat(rSubNodeName) +
"/ColumnIndex",
1448 OUString::Concat(rSubNodeName) +
"/IsNumberFormat",
1449 OUString::Concat(rSubNodeName) +
"/IsNumberFormatFromDataBase",
1450 OUString::Concat(rSubNodeName) +
"/NumberFormat",
1451 OUString::Concat(rSubNodeName) +
"/NumberFormatLocale"
1457 sal_Int32 nIdx = aNames.getLength();
1460 const OUString sRet =
"_" + OUString::number(nIdx++);
1472 for(OUString
const & nodeName : std::as_const(aNames))
1474 Sequence<Any> aSourceProperties =
GetProperties({ nodeName +
"/DataSource", nodeName +
"/Command" });
1475 const Any* pSourceProps = aSourceProperties.getArray();
1476 OUString sSource, sCommand;
1477 pSourceProps[0] >>= sSource;
1478 pSourceProps[1] >>= sCommand;
1488 Sequence<PropertyValue> aValues(aNodeNames.getLength());
1489 PropertyValue*
pValues = aValues.getArray();
1490 const OUString* pNodeNames = aNodeNames.getConstArray();
1491 for(sal_Int32
i = 0;
i < aNodeNames.getLength();
i++)
1493 pValues[
i].Name =
"/" + pNodeNames[
i];
1503 for( sal_Int32
n = 0;
n < nCnt; ++
n )
1506 if (!sTmp.isEmpty())
1507 pValues[4].
Value <<= sTmp;
1510 pValues[5].Value <<= sTmp;
1522 sNewNode +=
"/ColumnSet";
1530 OUString sColumnInsertNode(sNewNode +
"/__");
1532 sColumnInsertNode +=
"00";
1533 else if( nCol < 100 )
1534 sColumnInsertNode +=
"0";
1535 sColumnInsertNode += OUString::number( nCol );
1538 Sequence<PropertyValue> aSubValues(aSubNodeNames.getLength());
1539 PropertyValue* pSubValues = aSubValues.getArray();
1542 for(
const OUString& rSubNodeName : aSubNodeNames)
1543 pSubValues[i++].Name = rSubNodeName;
1544 pSubValues[0].Value <<= pColumn->
sColumn;
1545 pSubValues[1].Value <<= i;
1559 pSubValues[4].Value <<= sTmp;
1564 if( eLang != ePrevLang )
1570 pSubValues[5].Value <<= sPrevLang;
1579 for(OUString
const & nodeName : aNames)
1584 Sequence< Any> aDataSourceProps =
GetProperties(aSourceNames);
1585 const Any* pDataSourceProps = aDataSourceProps.getConstArray();
1586 OUString sSource, sCommand;
1587 sal_Int16 nCommandType;
1588 pDataSourceProps[0] >>= sSource;
1589 pDataSourceProps[1] >>= sCommand;
1590 pDataSourceProps[2] >>= nCommandType;
1593 DB_ColumnConfigData aNewData;
1595 pDataSourceProps[3] >>= aNewData.sEdit;
1596 pDataSourceProps[4] >>= aNewData.sTableList;
1597 pDataSourceProps[5] >>= aNewData.sTmplNm;
1598 pDataSourceProps[6] >>= aNewData.sTAutoFormatNm;
1599 if(pDataSourceProps[7].hasValue())
1600 aNewData.bIsTable = *o3tl::doAccess<bool>(pDataSourceProps[7]);
1601 if(pDataSourceProps[8].hasValue())
1602 aNewData.bIsField = *o3tl::doAccess<bool>(pDataSourceProps[8]);
1603 if(pDataSourceProps[9].hasValue())
1604 aNewData.bIsHeadlineOn = *o3tl::doAccess<bool>(pDataSourceProps[9]);
1605 if(pDataSourceProps[10].hasValue())
1606 aNewData.bIsEmptyHeadln = *o3tl::doAccess<bool>(pDataSourceProps[10]);
1608 const OUString sSubNodeName(nodeName +
"/ColumnSet/");
1610 for(
const OUString& rSubName : aSubNames)
1615 const Any* pSubProps = aSubProps.getConstArray();
1618 pSubProps[0] >>= sColumn;
1620 bool bFound =
false;
1621 for(
size_t nRealColumn = 0; nRealColumn <
aDBColumns.
size(); ++nRealColumn)
1623 if(
aDBColumns[nRealColumn]->sColumn == sColumn)
1632 pSubProps[1] >>= nIndex;
1633 std::unique_ptr<SwInsDBColumn> pInsDBColumn(
new SwInsDBColumn(sColumn));
1634 if(pSubProps[2].hasValue())
1635 pInsDBColumn->bHasFormat = *o3tl::doAccess<bool>(pSubProps[2]);
1636 if(pSubProps[3].hasValue())
1637 pInsDBColumn->bIsDBFormat = *o3tl::doAccess<bool>(pSubProps[3]);
1639 pSubProps[4] >>= pInsDBColumn->sUsrNumFormat;
1640 OUString sNumberFormatLocale;
1641 pSubProps[5] >>= sNumberFormatLocale;
1653 pInsDBColumn->nUsrNumFormat = rNFormatr.
GetEntryKey( pInsDBColumn->sUsrNumFormat,
1654 pInsDBColumn->eUsrNumFormatLng );
1656 aNewData.aDBColumns.insert(std::move(pInsDBColumn));
1658 OUString sTmp( aNewData.sTableList );
1659 if( !sTmp.isEmpty() )
1663 const OUString sEntry( sTmp.getToken( 0,
'\x0a', n ) );
1682 sTmp = aNewData.sTmplNm;
1683 if( !sTmp.isEmpty() )
1689 sTmp = aNewData.sTAutoFormatNm;
1690 if( !sTmp.isEmpty() )
1694 aAutoFormatTable.
Load();
1695 for(
size_t nAutoFormat = aAutoFormatTable.
size(); nAutoFormat; )
1696 if( sTmp == aAutoFormatTable[ --nAutoFormat ].
GetName() )
1705 m_xRbAsText->set_active( !aNewData.bIsTable && !aNewData.bIsField );
1717 for(
size_t m = 0;
m < aNewData.aDBColumns.size() ; ++
m )
1729 sal_Int32 nCheckPos;
#define LINK(Instance, Class, Member)
std::unique_ptr< weld::Frame > m_xFormatFrame
bool InsertField2(SwField const &, SwPaM *pAnnotationRange=nullptr)
SwNodeOffset min(const SwNodeOffset &a, const SwNodeOffset &b)
SfxStyleSheetBase * First(SfxStyleFamily eFamily, SfxStyleSearchBits eMask=SfxStyleSearchBits::All)
SwMoveFnCollection const & fnParaEnd
SwMoveFnCollection const & fnTableEnd
constexpr SwTwips MIN_BORDER_DIST
static bool SetSetProperties(css::uno::Reference< css::container::XHierarchicalNameAccess > const &xHierarchyAccess, const OUString &rNode, const css::uno::Sequence< css::beans::PropertyValue > &rValues)
void SplitNode(bool bAutoFormat=false)
static void lcl_InsTextInArr(const OUString &rText, DB_Columns &rColArr)
bool IsAutoUpdateCells() const
static css::uno::Sequence< OUString > GetNodeNames(css::uno::Reference< css::container::XHierarchicalNameAccess > const &xHierarchyAccess, const OUString &rNode, ConfigNameFormat eFormat)
std::unique_ptr< NumFormatListBox > m_xLbDbFormatFromUsr
Represents the style of a paragraph.
std::vector< SwColumn > SwColumns
SwTextFormatColl * GetTextCollFromPool(sal_uInt16 nId)
sal_Int32 compareString(const OUString &s1, const OUString &s2) const
void SetDefDist(sal_uInt16 nNew)
bool GotoPrevTable(SwPaM &rCurrentCursor, SwMoveFnCollection const &fnPosTable, bool bInReadOnly)
void SetAutoUpdateCells(bool bFlag)
bool GoCurrPara(SwPaM &rPam, SwMoveFnCollection const &aPosPara)
virtual const SfxItemSet * GetOutputItemSet() const =0
const Color aColNames[SC_RANGECOLORS]
static void FillUIName(const OUString &rName, OUString &rFillName, SwGetPoolIdFromName)
sal_Int32 findValue(const css::uno::Sequence< T1 > &_rList, const T2 &_rValue)
void SetRight(tools::Long nNew)
void SetMinDist(bool bNew)
const SwRect & GetAnyCurRect(CurRectType eType, const Point *pPt=nullptr, const css::uno::Reference< css::embed::XEmbeddedObject > &=css::uno::Reference< css::embed::XEmbeddedObject >()) const
static LanguageType convertToLanguageType(const css::lang::Locale &rLocale, bool bResolveSystem=true)
static OUString convertToBcp47(LanguageType nLangID)
sal_uInt16 GetCurColNum(SwGetCurColNumPara *pPara=nullptr) const
The ruler needs some information too.
Base class of all fields.
std::unique_ptr< weld::TreeView > m_xLbTextDbColumn
SwMoveFnCollection const & fnParaStart
DB_Column(const OUString &rText)
std::unique_ptr< SwField > CopyField() const
bool operator<(const SwInsDBColumn &rCmp) const
SwUndoId EndUndo(SwUndoId eUndoId=SwUndoId::EMPTY, const SwRewriter *pRewriter=nullptr)
Closes parenthesis of nUndoId, not used by UI.
const_iterator find(const Value &x) const
std::vector< std::unique_ptr< DB_Column > > DB_Columns
virtual VclPtr< SfxAbstractTabDialog > CreateSwTableTabDlg(weld::Window *pParent, const SfxItemSet *pItemSet, SwWrtShell *pSh)=0
#define FN_PARAM_TABLE_NAME
void DoUndo(bool bOn=true)
Undo.
std::unique_ptr< weld::Button > m_xPbTableAutofmt
std::unique_ptr< weld::CheckButton > m_xCbTableHeadon
std::unique_ptr< weld::RadioButton > m_xRbAsText
constexpr TypedWhichId< SwTableBoxValue > RES_BOXATR_VALUE(152)
virtual short Execute()=0
DB_Column(const SwInsDBColumn &rInfo, sal_uInt32 nFormat_)
enum DB_Column::Type eColType
virtual void Notify(const css::uno::Sequence< OUString > &aPropertyNames) override
bool GoNextCell(bool bAppendLine=true)
set cursor into next/previous cell
std::unique_ptr< weld::TreeView > m_xLbTableCol
SwWrtShell & GetWrtShell() const
bool GotoCurrTable(SwPaM &rCurrentCursor, SwMoveFnCollection const &fnPosTable, bool bInReadOnly)
void SetRightMax(tools::Long nNew)
LanguageType GetCurLang() const
Used by the UI to modify the document model.
#define FN_PARAM_TABLE_HEADLINE
OUString SwResId(TranslateId aId)
std::unique_ptr< weld::TextView > m_xEdDbText
const SwTable & InsertTable(const SwInsertTableOptions &rInsTableOpts, sal_uInt16 nRows, sal_uInt16 nCols, const SwTableAutoFormat *pTAFormat=nullptr)
Inserts an nRows x nCols table to the document at the current position.
virtual OUString get_selected_text() const =0
const OUString & GetName() const
bool SplitTextToColArr(const OUString &rText, DB_Columns &rColArr, bool bInsField)
std::unique_ptr< SfxItemSet > pTableSet
constexpr sal_uInt32 NUMBERFORMAT_ENTRY_NOT_FOUND
static SW_DLLPUBLIC sal_uInt16 GetPoolIdFromUIName(const OUString &rName, SwGetPoolIdFromName)
void Width(tools::Long nNew)
virtual VclPtr< AbstractSwAutoFormatDlg > CreateSwAutoFormatDlg(weld::Window *pParent, SwWrtShell *pShell, bool bSetAutoFormat=true, const SwTableAutoFormat *pSelFormat=nullptr)=0
void Insert(const OUString &)
const IDocumentMarkAccess * getIDocumentMarkAccess() const
Provides access to the document bookmark interface.
virtual OUString GetName() const override
LanguageType eUsrNumFormatLng
SW_DLLPUBLIC const WhichRangesContainer & SwuiGetUITableAttrRange()
static css::uno::Reference< css::sdbc::XResultSet > createCursor(const OUString &_sDataSourceName, const OUString &_sCommand, sal_Int32 _nCommandType, const css::uno::Reference< css::sdbc::XConnection > &_xConnection, const SwView *pView)
creates a RowSet, which must be disposed after use.
void SetTableBoxFormulaAttrs(const SfxItemSet &rSet)
IMPL_LINK_NOARG(SwInsertDBColAutoPilot, TableFormatHdl, weld::Button &, void)
weld::Window * GetFrameWeld(const SfxFrame *pFrame)
bool ClearNodeElements(const OUString &rNode, css::uno::Sequence< OUString > const &rElements)
static css::uno::Sequence< css::uno::Any > GetProperties(css::uno::Reference< css::container::XHierarchicalNameAccess > const &xHierarchyAccess, const css::uno::Sequence< OUString > &rNames, bool bAllLocales)
const SfxItemPool & GetAttrPool() const
void SetTextFormatColl(SwTextFormatColl *, const bool bResetListAttrs=false)
Add 2nd optional parameter - see also
#define TOOLS_WARN_EXCEPTION(area, stream)
Rect of current PrtArea of page.
bool HasSelection() const
SwFieldType * InsertFieldType(const SwFieldType &)
insert field type
void SetRowsToRepeat(sal_uInt16 nNumOfRows)
std::unique_ptr< weld::Button > m_xPbTableFormat
SwAbstractDialogFactory & GetFactory()
std::unique_ptr< weld::RadioButton > m_xRbDbFormatFromUsr
std::unique_ptr< weld::RadioButton > m_xRbAsField
SwInsDBColumns aDBColumns
::sw::mark::IMark * SetBookmark(const vcl::KeyCode &, const OUString &rName, IDocumentMarkAccess::MarkType eMark=IDocumentMarkAccess::MarkType::BOOKMARK)
const OUString & GetValue() const
sal_uInt16 GetHtmlMode(const SwDocShell *pShell)
const SwInsDBColumn * pColInfo
SwUndoId StartUndo(SwUndoId eUndoId=SwUndoId::EMPTY, const SwRewriter *pRewriter=nullptr)
Undo: set up Undo parenthesis, return nUndoId of this parenthesis.
virtual SfxStyleSheetBasePool * GetStyleSheetPool() override
For Style PI.
OUString GetUniqueTableName() const
std::unique_ptr< weld::Frame > m_xHeadFrame
const_iterator end() const
void SetTableStyle(const OUString &rStyleName)
Set table style of the current table.
SwDocShell * GetDocShell()
SwFrameFormat * GetTableFormat()
void DataToDoc(const css::uno::Sequence< css::uno::Any > &rSelection, css::uno::Reference< css::sdbc::XDataSource > const &rxSource, css::uno::Reference< css::sdbc::XConnection > const &xConnection, css::uno::Reference< css::sdbc::XResultSet > const &xResultSet)
DB_Column(const SwInsDBColumn &rInfo, SwDBField &rField)
void AppendUndoForInsertFromDB(bool bIsTable)
Set up InsertDB as table Undo.
const LanguageTag & getLocale()
sal_uInt8 GetTableDest() const
const PropertyValue * pValues
IMPL_LINK(SwInsertDBColAutoPilot, PageHdl, weld::Toggleable &, rButton, void)
void GotoMark(const ::sw::mark::IMark *const pMark)
constexpr TypedWhichId< SvxBrushItem > RES_BACKGROUND(105)
std::unique_ptr< weld::RadioButton > m_xRbHeadlColnms
SwMoveFnCollection const & fnTableStart
sal_uInt16 GetRight() const
const SwViewOption * GetViewOptions() const
bool MoveTable(SwWhichTable, SwMoveFnCollection const &)
std::unique_ptr< weld::ComboBox > m_xLbDbParaColl
SfxStyleSheetBase * Next()
SwInsertDBColAutoPilot(SwView &rView, css::uno::Reference< css::sdbc::XDataSource > const &rxSource, css::uno::Reference< css::sdbcx::XColumnsSupplier > const &xColSupp, const SwDBData &rData)
std::unique_ptr< weld::Button > m_xIbDbcolAllTo
SwTextFormatColl * FindTextFormatCollByName(const OUString &rName) const
LanguageType GetAppLanguage()
SW_DLLPUBLIC void ItemSetToTableParam(const SfxItemSet &rSet, SwWrtShell &rSh)
std::unique_ptr< weld::TreeView > m_xLbTableDbColumn
virtual void ImplCommit() override
void Insert(tools::Long nValue, bool bValue, size_t nPos)
Reference< XExecutableDialog > m_xDialog
static Sequence< OUString > lcl_createSourceNames(std::u16string_view rNodeName)
const SwExtendedSubType SUB_OWN_FMT
SwDBField: Don't accept formatting from database.
Reference< XComponentContext > getProcessComponentContext()
static OUString GetDBField(css::uno::Reference< css::beans::XPropertySet > const &xColumnProp, const SwDBFormatData &rDBFormatData, double *pNumber=nullptr)
std::unique_ptr< weld::Button > m_xIbDbcolAllFrom
virtual ~SwInsertDBColAutoPilot() override
constexpr TypedWhichId< SvxBoxItem > RES_BOX(106)
sal_uInt16 GetLeft() const
static Sequence< OUString > lcl_CreateSubNames(std::u16string_view rSubNodeName)
std::unique_ptr< weld::Button > m_xIbDbcolOneFrom
sal_uInt32 GetValue() const
void SetValid(SvxBoxInfoItemValidFlags nValid, bool bValid=true)
const sal_uInt16 CRSR_SKIP_CHARS
const SwFrameFormat * pFrameFormat
std::unique_ptr< SwTableAutoFormat > m_xTAutoFormat
static OUString lcl_CreateUniqueName(const Sequence< OUString > &aNames)
static OUString EraseAllMnemonicChars(const OUString &rStr)
std::unique_ptr< weld::RadioButton > m_xRbHeadlEmpty
SwTextFormatColl * MakeTextFormatColl(const OUString &rFormatCollName, SwTextFormatColl *pDerivedFrom=nullptr)
const SwInsertTableOptions & GetInsTableFlags(bool bHTML) const
std::pair< const_iterator, bool > insert(Value &&x)
virtual void SetSubType(sal_uInt16)
void StartAllAction()
For all views of this document.
virtual std::unique_ptr< ILazyDeleter > deleteMark(const IDocumentMarkAccess::const_iterator_t &ppMark, bool isMoveNodes)=0
Deletes a mark.
SvNumberFormatter * GetNumberFormatter()
Query NumberFormatter from document.
Rect of PrtArea of FlyFrame.
FrameTypeFlags GetFrameType(const Point *pPt, bool bStopAtFly) const
For return values see above FrameType.
std::unique_ptr< weld::RadioButton > m_xRbDbFormatFromDb
std::vector< std::unique_ptr< SwInsDBColumn > >::const_iterator const_iterator
SwTextFormatColl & GetNextTextFormatColl() const
CollatorWrapper & GetAppCollator()
std::unique_ptr< weld::Button > m_xIbDbcolToEdit
std::unique_ptr< weld::Button > m_xIbDbcolOneTo
std::unique_ptr< weld::RadioButton > m_xRbAsTable