12 #include <document.hxx>
28 std::unique_ptr<weld::Container>
mxGrid;
55 : mxBuilder(
Application::CreateBuilder(pParent,
"modules/scalc/ui/dataproviderentry.ui"))
56 , mxGrid(mxBuilder->weld_container(
"grid"))
57 , mxProviderList(mxBuilder->weld_combo_box(
"provider_lst"))
58 , mxEditURL(mxBuilder->weld_entry(
"ed_url"))
59 , mxEditID(mxBuilder->weld_entry(
"ed_id"))
60 , mxApplyBtn(mxBuilder->weld_button(
"apply"))
61 , maImportCallback(rImportCallback)
64 for (
const auto& rDataProvider : aDataProvider)
81 bValid &= !
mxEditURL->get_text().isEmpty();
126 updateApplyBtn(
true);
127 maImportCallback.Call(
this);
149 : mxBuilder(
Application::CreateBuilder(pParent, rUIFile))
150 , mxGrid(mxBuilder->weld_container(
"grid"))
151 , mpContainer(pParent)
166 const char* aMenuName;
167 std::function<void(ScDataProviderDlg*)> maCallback;
170 MenuData aStartData[] = {
175 MenuData aColumnData[] = {
190 std::unique_ptr<weld::Entry> mxColumnNums;
191 std::unique_ptr<weld::Button> mxDelete;
192 std::function<void(sal_uInt32&)> maDeleteTransformation;
196 ScDeleteColumnTransformationControl(
const ScDocument* pDoc,
weld::Container* pParent, sal_uInt32 aIndex, std::function<
void(sal_uInt32&)> aDeleteTransformation);
202 ScDeleteColumnTransformationControl::ScDeleteColumnTransformationControl(
203 const ScDocument* pDoc,
weld::Container* pParent, sal_uInt32 nIndex, std::function<
void(sal_uInt32&)> aDeleteTransformation)
205 , mxColumnNums(mxBuilder->weld_entry(
"ed_columns"))
206 , mxDelete(mxBuilder->weld_button(
"ed_delete"))
207 , maDeleteTransformation(
std::move(aDeleteTransformation))
210 mxDelete->connect_clicked(
LINK(
this,ScDeleteColumnTransformationControl, DeleteHdl));
213 std::shared_ptr<sc::DataTransformation> ScDeleteColumnTransformationControl::getTransformation()
215 OUString aColumnString = mxColumnNums->get_text();
217 std::set<SCCOL> ColNums;
218 for (
const auto& rColStr : aSplitColumns)
220 sal_Int32 nCol = rColStr.toInt32();
224 if (nCol > mpDoc->
MaxCol())
228 ColNums.insert(nCol - 1);
231 return std::make_shared<sc::ColumnRemoveTransformation>(ColNums);
237 std::unique_ptr<weld::Entry> mxSeparator;
238 std::unique_ptr<weld::SpinButton> mxNumColumns;
239 std::unique_ptr<weld::Button> mxDelete;
241 std::function<void(sal_uInt32&)> maDeleteTransformation;
244 ScSplitColumnTransformationControl(
weld::Container* pParent,
SCCOL nCol, sal_uInt32 nIndex, std::function<
void(sal_uInt32&)> aDeleteTransformation);
250 ScSplitColumnTransformationControl::ScSplitColumnTransformationControl(
252 std::function<
void(sal_uInt32&)> aDeleteTransformation)
254 , mxSeparator(mxBuilder->weld_entry(
"ed_separator"))
255 , mxNumColumns(mxBuilder->weld_spin_button(
"num_cols"))
256 , mxDelete(mxBuilder->weld_button(
"ed_delete"))
258 , maDeleteTransformation(
std::move(aDeleteTransformation))
260 mxDelete->connect_clicked(
LINK(
this,ScSplitColumnTransformationControl, DeleteHdl));
263 std::shared_ptr<sc::DataTransformation> ScSplitColumnTransformationControl::getTransformation()
265 OUString aSeparator = mxSeparator->get_text();
266 sal_Unicode cSeparator = aSeparator.isEmpty() ?
',' : aSeparator[0];
267 return std::make_shared<sc::SplitColumnTransformation>(
mnCol, cSeparator);
273 std::unique_ptr<weld::Entry> mxSeparator;
274 std::unique_ptr<weld::Entry> mxEdColumns;
275 std::unique_ptr<weld::Button> mxDelete;
276 std::function<void(sal_uInt32&)> maDeleteTransformation;
280 ScMergeColumnTransformationControl(
const ScDocument *pDoc,
weld::Container* pParent,
SCCOL nStartCol,
SCCOL nEndCol, sal_uInt32 nIndex, std::function<
void(sal_uInt32&)> aDeleteTransformation);
286 ScMergeColumnTransformationControl::ScMergeColumnTransformationControl(
288 std::function<
void(sal_uInt32&)> aDeleteTransformation)
290 , mxSeparator(mxBuilder->weld_entry(
"ed_separator"))
291 , mxEdColumns(mxBuilder->weld_entry(
"ed_columns"))
292 , mxDelete(mxBuilder->weld_button(
"ed_delete"))
293 , maDeleteTransformation(
std::move(aDeleteTransformation))
296 mxDelete->connect_clicked(
LINK(
this,ScMergeColumnTransformationControl, DeleteHdl));
301 aBuffer.append(OUString::number(nStartCol + 1));
302 for (
SCCOL nCol = nStartCol + 1; nCol <= nEndCol; ++nCol)
304 aBuffer.append(
";").append(OUString::number(nCol + 1));
307 mxEdColumns->set_text(aBuffer.makeStringAndClear());
310 std::shared_ptr<sc::DataTransformation> ScMergeColumnTransformationControl::getTransformation()
312 OUString aColumnString = mxEdColumns->get_text();
314 std::set<SCCOL> aMergedColumns;
315 for (
const auto& rColStr : aSplitColumns)
317 sal_Int32 nCol = rColStr.toInt32();
321 if (nCol > mpDoc->
MaxCol())
325 aMergedColumns.insert(nCol - 1);
327 return std::make_shared<sc::MergeColumnTransformation>(aMergedColumns, mxSeparator->get_text());
333 std::unique_ptr<weld::CheckButton> mxAscending;
334 std::unique_ptr<weld::Entry> mxEdColumns;
335 std::unique_ptr<weld::Button> mxDelete;
336 std::function<void(sal_uInt32&)> maDeleteTransformation;
340 ScSortTransformationControl(
const ScDocument* pDoc,
weld::Container* pParent, sal_uInt32 nIndex, std::function<
void(sal_uInt32&)> aDeleteTransformation);
346 ScSortTransformationControl::ScSortTransformationControl(
347 const ScDocument* pDoc,
weld::Container* pParent, sal_uInt32 nIndex, std::function<
void(sal_uInt32&)> aDeleteTransformation)
349 , mxAscending(mxBuilder->weld_check_button(
"ed_ascending"))
350 , mxEdColumns(mxBuilder->weld_entry(
"ed_columns"))
351 , mxDelete(mxBuilder->weld_button(
"ed_delete"))
352 , maDeleteTransformation(
std::move(aDeleteTransformation))
355 mxDelete->connect_clicked(
LINK(
this,ScSortTransformationControl, DeleteHdl));
358 std::shared_ptr<sc::DataTransformation> ScSortTransformationControl::getTransformation()
360 OUString aColStr = mxEdColumns->get_text();
361 bool aIsAscending = mxAscending->get_active();
363 sal_Int32 nCol = aColStr.toInt32();
364 if (nCol > 0 && nCol <= mpDoc->MaxCol())
370 aSortKey.
nField = aColumn;
373 return std::make_shared<sc::SortTransformation>(aSortParam);
379 std::unique_ptr<weld::Entry> mxColumnNums;
380 std::unique_ptr<weld::ComboBox> mxType;
381 std::unique_ptr<weld::Button> mxDelete;
382 std::function<void(sal_uInt32&)> maDeleteTransformation;
386 ScColumnTextTransformation(
const ScDocument* pDoc,
weld::Container* pParent, sal_uInt32 nIndex, std::function<
void(sal_uInt32&)> aDeleteTransformation);
392 ScColumnTextTransformation::ScColumnTextTransformation(
393 const ScDocument* pDoc,
weld::Container* pParent, sal_uInt32 nIndex, std::function<
void(sal_uInt32&)> aDeleteTransformation)
395 , mxColumnNums(mxBuilder->weld_entry(
"ed_columns"))
396 , mxType(mxBuilder->weld_combo_box(
"ed_lst"))
397 , mxDelete(mxBuilder->weld_button(
"ed_delete"))
398 , maDeleteTransformation(
std::move(aDeleteTransformation))
401 mxDelete->connect_clicked(
LINK(
this,ScColumnTextTransformation, DeleteHdl));
404 std::shared_ptr<sc::DataTransformation> ScColumnTextTransformation::getTransformation()
406 OUString aColumnString = mxColumnNums->get_text();
408 std::set<SCCOL> aColumns;
409 for (
const auto& rColStr : aSplitColumns)
411 sal_Int32 nCol = rColStr.toInt32();
415 if (nCol > mpDoc->
MaxCol())
419 aColumns.insert(nCol - 1);
422 sal_Int32
nPos = mxType->get_active();
443 std::unique_ptr<weld::Entry> mxColumnNums;
444 std::unique_ptr<weld::ComboBox> mxType;
445 std::unique_ptr<weld::Button> mxDelete;
446 std::function<void(sal_uInt32&)> maDeleteTransformation;
450 ScAggregateFunction(
const ScDocument* pDoc,
weld::Container* pParent, sal_uInt32 nIndex, std::function<
void(sal_uInt32&)> aDeleteTransformation);
457 std::function<
void(sal_uInt32&)> aDeleteTransformation)
459 , mxColumnNums(mxBuilder->weld_entry(
"ed_columns"))
460 , mxType(mxBuilder->weld_combo_box(
"ed_lst"))
461 , mxDelete(mxBuilder->weld_button(
"ed_delete"))
462 , maDeleteTransformation(
std::move(aDeleteTransformation))
465 mxDelete->connect_clicked(
LINK(
this,ScAggregateFunction, DeleteHdl));
468 std::shared_ptr<sc::DataTransformation> ScAggregateFunction::getTransformation()
470 OUString aColumnString = mxColumnNums->get_text();
471 sal_Int32 nPos = mxType->get_active();
473 std::set<SCCOL> aColumns;
474 for (
const auto& rColStr : aSplitColumns)
476 sal_Int32 nCol = rColStr.toInt32();
480 if (nCol > mpDoc->
MaxCol())
484 aColumns.insert(nCol - 1);
506 std::unique_ptr<weld::Entry> mxColumnNums;
507 std::unique_ptr<weld::ComboBox> mxType;
508 std::unique_ptr<weld::Button> mxDelete;
509 std::function<void(sal_uInt32&)> maDeleteTransformation;
513 ScNumberTransformation(
const ScDocument *pDoc,
weld::Container* pParent, sal_uInt32 nIndex, std::function<
void(sal_uInt32&)> aDeleteTransformation);
519 ScNumberTransformation::ScNumberTransformation(
520 const ScDocument *pDoc,
weld::Container* pParent, sal_uInt32 nIndex, std::function<
void(sal_uInt32&)> aDeleteTransformation)
522 , mxColumnNums(mxBuilder->weld_entry(
"ed_columns"))
523 , mxType(mxBuilder->weld_combo_box(
"ed_lst"))
524 , mxDelete(mxBuilder->weld_button(
"ed_delete"))
525 , maDeleteTransformation(
std::move(aDeleteTransformation))
528 mxDelete->connect_clicked(
LINK(
this,ScNumberTransformation, DeleteHdl));
531 std::shared_ptr<sc::DataTransformation> ScNumberTransformation::getTransformation()
533 OUString aColumnString = mxColumnNums->get_text();
534 sal_Int32 nPos = mxType->get_active();
536 std::set<SCCOL> aColumns;
537 for (
const auto& rColStr : aSplitColumns)
539 sal_Int32 nCol = rColStr.toInt32();
543 if (nCol > mpDoc->
MaxCol())
547 aColumns.insert(nCol - 1);
587 std::unique_ptr<weld::Entry> mxColumnNums;
588 std::unique_ptr<weld::Entry> mxReplaceString;
589 std::unique_ptr<weld::Button> mxDelete;
590 std::function<void(sal_uInt32&)> maDeleteTransformation;
595 ScReplaceNullTransformation(
const ScDocument *pDoc,
weld::Container* pParent, sal_uInt32 nIndex, std::function<
void(sal_uInt32&)> aDeleteTransformation);
601 ScReplaceNullTransformation::ScReplaceNullTransformation(
const ScDocument *pDoc,
weld::Container* pParent, sal_uInt32 nIndex, std::function<
void(sal_uInt32&)> aDeleteTransformation)
603 , mxColumnNums(mxBuilder->weld_entry(
"ed_columns"))
604 , mxReplaceString(mxBuilder->weld_entry(
"ed_str"))
605 , mxDelete(mxBuilder->weld_button(
"ed_delete"))
606 , maDeleteTransformation(aDeleteTransformation)
609 mxDelete->connect_clicked(
LINK(
this,ScReplaceNullTransformation, DeleteHdl));
613 std::shared_ptr<sc::DataTransformation> ScReplaceNullTransformation::getTransformation()
615 OUString aColumnString = mxColumnNums->get_text();
616 OUString aReplaceWithString = mxReplaceString->get_text();
618 std::set<SCCOL> aColumns;
619 for (
const auto& rColStr : aSplitColumns)
621 sal_Int32 nCol = rColStr.toInt32();
625 if (nCol > mpDoc->
MaxCol())
629 aColumns.insert(nCol - 1);
632 return std::make_shared<sc::ReplaceNullTransformation>(aColumns,aReplaceWithString);
638 std::unique_ptr<weld::Entry> mxColumnNums;
639 std::unique_ptr<weld::ComboBox> mxType;
640 std::unique_ptr<weld::Button> mxDelete;
641 std::function<void(sal_uInt32&)> maDeleteTransformation;
646 ScDateTimeTransformation(
const ScDocument* pDoc,
weld::Container* pParent, sal_uInt32 nIndex, std::function<
void(sal_uInt32&)> aDeleteTransformation);
652 ScDateTimeTransformation::ScDateTimeTransformation(
const ScDocument* pDoc,
weld::Container* pParent, sal_uInt32 nIndex, std::function<
void(sal_uInt32&)> aDeleteTransformation)
654 , mxColumnNums(mxBuilder->weld_entry(
"ed_columns"))
655 , mxType(mxBuilder->weld_combo_box(
"ed_lst"))
656 , mxDelete(mxBuilder->weld_button(
"ed_delete"))
657 , maDeleteTransformation(aDeleteTransformation)
660 mxDelete->connect_clicked(
LINK(
this,ScDateTimeTransformation, DeleteHdl));
663 std::shared_ptr<sc::DataTransformation> ScDateTimeTransformation::getTransformation()
665 OUString aColumnString = mxColumnNums->get_text();
666 sal_Int32 nPos = mxType->get_active();
668 std::set<SCCOL> aColumns;
669 for (
const auto& rColStr : aSplitColumns)
671 sal_Int32 nCol = rColStr.toInt32();
675 if (nCol > mpDoc->
MaxCol())
679 aColumns.insert(nCol - 1);
730 : GenericDialogController(pParent,
"modules/scalc/ui/dataproviderdlg.ui",
"dataproviderdlg")
731 , mxDoc(
std::move(pDoc))
732 , mxStartMenu(m_xBuilder->weld_menu(
"start"))
733 , mxColumnMenu(m_xBuilder->weld_menu(
"column"))
734 , mxBox(m_xBuilder->weld_container(
"data_table"))
735 , m_xTableParent(mxBox->CreateChildFrame())
737 , mxScroll(m_xBuilder->weld_scrolled_window(
"scroll"))
738 , mxList(m_xBuilder->weld_container(
"operation_ctrl"))
740 , mxDBRanges(m_xBuilder->weld_combo_box(
"select_db_range"))
750 for (
auto& rNamedDB : rNamedDBs)
756 bool bSuccess =
mxDoc->GetDBCollection()->getNamedDBs().insert(std::unique_ptr<ScDBData>(
pDBData));
774 for (
const auto& itrStartData : aStartData)
775 mxStartMenu->append(OUString::number(itrStartData.nMenuID), OUString::createFromAscii(itrStartData.aMenuName));
778 for (
const auto& itrColumnData : aColumnData)
779 mxColumnMenu->append(OUString::number(itrColumnData.nMenuID), OUString::createFromAscii(itrColumnData.aMenuName));
785 auto nId = rIdent.toInt32();
786 for (
auto&
i: aStartData)
788 if (
i.nMenuID ==
nId)
798 mxScroll->vadjustment_set_value(mxScroll->vadjustment_get_upper());
803 auto nId = rIdent.toInt32();
804 for (
auto&
i: aColumnData)
806 if (
i.nMenuID ==
nId)
818 if (pCtrl == mxDataProviderCtrl.get())
820 import(*mxDoc,
true);
837 maControls.emplace_back(std::make_unique<ScDeleteColumnTransformationControl>(
mxDoc.get(),
mxList.get(),
mnIndex++, adeleteTransformation));
842 SCCOL nStartCol = -1;
846 maControls.emplace_back(std::make_unique<ScSplitColumnTransformationControl>(
mxList.get(), nStartCol,
mnIndex++, adeleteTransformation));
851 SCCOL nStartCol = -1;
855 maControls.emplace_back(std::make_unique<ScMergeColumnTransformationControl>(
mxDoc.get(),
mxList.get(), nStartCol, nEndCol,
mnIndex++, adeleteTransformation));
896 bool hasDBName(
const OUString& rName,
ScDBCollection* pDBCollection)
933 (*itr)->updateIndex(nIndex++);
941 maDeleteTransformation(
mnIndex);
946 maDeleteTransformation(
mnIndex);
951 maDeleteTransformation(
mnIndex);
956 maDeleteTransformation(
mnIndex);
961 maDeleteTransformation(
mnIndex);
966 maDeleteTransformation(
mnIndex);
971 maDeleteTransformation(
mnIndex);
976 maDeleteTransformation(
mnIndex);
981 maDeleteTransformation(
mnIndex);
css::uno::Reference< css::linguistic2::XProofreadingIterator > get(css::uno::Reference< css::uno::XComponentContext > const &context)
std::unique_ptr< ScDataProviderBaseControl > mxDataProviderCtrl
::std::vector< ScSortKeyState > maKeyState
#define LINK(Instance, Class, Member)
std::shared_ptr< weld::Dialog > m_xDialog
std::unique_ptr< weld::Container > mxGrid
std::shared_ptr< ScDocument > mxDoc
sc::ExternalDataSource getDataSource(ScDocument *pDoc)
SC_DLLPUBLIC ScDBCollection * GetDBCollection() const
void Init(std::shared_ptr< ScDocument > pDoc)
static std::vector< OUString > getDataProviders()
void getColRange(SCCOL &rStartCol, SCCOL &rEndCol) const
#define DECL_LINK(Member, ArgType, RetType)
std::unique_ptr< weld::Menu > mxColumnMenu
std::unique_ptr< weld::Container > mxBox
void AddDataTransformation(const std::shared_ptr< sc::DataTransformation > &mpDataTransformation)
void sortTransformation()
std::vector< OUString > split(const OUString &rStr, sal_Unicode cSeparator)
const BorderLinePrimitive2D *pCandidateB assert(pCandidateA)
SC_DLLPUBLIC sc::ExternalDataMapper & GetExternalDataMapper()
std::unique_ptr< weld::Button > mxApplyBtn
std::unique_ptr< weld::Menu > mxStartMenu
void setID(const OUString &rID)
IMPL_LINK_NOARG(ScDataProviderBaseControl, ProviderSelectHdl, weld::ComboBox &, void)
IMPL_LINK(ScDataProviderDlg, StartMenuHdl, const OString &, rIdent, void)
SC_DLLPUBLIC SCCOL MaxCol() const
css::uno::Reference< css::awt::XWindow > m_xTableParent
void import(ScDocument &rDoc, bool bInternal=false)
std::unique_ptr< weld::ComboBox > mxProviderList
OUString getDBName() const
void deletefromList(sal_uInt32 nIndex)
virtual void Invalidate(InvalidateFlags nFlags=InvalidateFlags::NONE)
void textTransformation()
tools::Long Width() const
void refresh(ScDocument *pDoc, bool bDeterministic=false)
const OUString & GetName() const
void updateApplyBtn(bool bValidConfig)
virtual void move(weld::Widget *pWidget, weld::Container *pNewParent)=0
ScDBData * findByUpperName(const OUString &rName)
virtual ~ScDataProviderDlg() override
std::unique_ptr< weld::Builder > mxBuilder
void insertDataSource(const ExternalDataSource &rSource)
void replaceNullTransformation()
std::unique_ptr< char[]> aBuffer
#define SAL_WARN_IF(condition, area, stream)
void numberTransformation()
std::unique_ptr< weld::Entry > mxEditURL
Link< ScDataProviderBaseControl *, void > maImportCallback
std::unique_ptr< weld::Entry > mxEditID
void dateTimeTransformation()
tools::Long Height() const
static SC_DLLPUBLIC const CharClass * getCharClassPtr()
void SetInvokeHandler(const Link< Timer *, void > &rLink)
ScDataProviderDlg(weld::Window *pWindow, std::shared_ptr< ScDocument > pDoc, const ScDocument *pDocument)
virtual Size GetOptimalSize() const override
void SetPriority(TaskPriority ePriority)
ScDataProviderBaseControl(weld::Container *pParent, const Link< ScDataProviderBaseControl *, void > &rImportCallback)
std::unique_ptr< weld::ComboBox > mxDBRanges
VclPtr< ScDataTableView > mxTable
void setDBData(const OUString &rDBName)
std::vector< std::unique_ptr< ScDataTransformationBaseControl > > maControls
std::unique_ptr< weld::Container > mxList
void Show(bool bVisible=true, ShowFlags nFlags=ShowFlags::NONE)
DECL_LINK(ProviderSelectHdl, weld::ComboBox &, void)