11 #include <bitmaps.hlst>
12 #include <document.hxx>
22 #include <com/sun/star/ui/dialogs/XFilePicker3.hpp>
23 #include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp>
24 #include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
43 std::unique_ptr<weld::TreeIter> xEntry(rTree.
make_iterator(&rEntry));
52 aBuf.insert(0, rTree.
get_text(*xEntry, 0));
53 if (isAttribute(rTree, *xEntry))
60 return aBuf.makeStringAndClear();
69 , mbDlgLostFocus(
false)
70 , mxBtnSelectSource(m_xBuilder->weld_button(
"selectsource"))
71 , mxFtSourceFile(m_xBuilder->weld_label(
"sourcefile"))
72 , mxMapGrid(m_xBuilder->weld_container(
"mapgrid"))
73 , mxLbTree(m_xBuilder->weld_tree_view(
"tree"))
74 , mxRefEdit(new
formula::RefEdit(m_xBuilder->weld_entry(
"edit")))
75 , mxRefBtn(new
formula::RefButton(m_xBuilder->weld_button(
"ref")))
76 , mxBtnOk(m_xBuilder->weld_button(
"ok"))
77 , mxBtnCancel(m_xBuilder->weld_button(
"cancel"))
78 , maCustomCompare(*mxLbTree)
79 , maCellLinks(maCustomCompare)
80 , maRangeLinks(maCustomCompare)
84 mxLbTree->set_selection_mode(SelectionMode::Multiple);
96 mxBtnOk->connect_clicked(aBtnHdl);
158 DoClose(ScXMLSourceDlgWrapper::GetChildWindowId());
167 uno::Reference<ui::dialogs::XFilePicker3> xFilePicker = aDlgHelper.GetFilePicker();
174 xFilePicker->setDisplayDirectory(aPath);
176 if (xFilePicker->execute() != ui::dialogs::ExecutableDialogResults::OK)
180 uno::Sequence<OUString> aFiles = xFilePicker->getSelectedFiles();
181 if (!aFiles.hasElements())
213 std::unique_ptr<weld::TreeIter> xParent(rTree.
make_iterator(&rCurEntry));
215 std::unique_ptr<weld::TreeIter> xRefEntry;
219 OSL_ASSERT(pUserData);
231 std::unique_ptr<weld::TreeIter> xCurEntry(rTree.
make_iterator(&rCurEntry));
239 std::unique_ptr<weld::TreeIter> xEntry(
mxLbTree->make_iterator());
240 if (!
mxLbTree->get_cursor(xEntry.get()))
249 OSL_ASSERT(pUserData);
260 switch (pUserData->
meType)
278 if (
mxLbTree->iter_has_child(rEntry))
281 bool bHasChild =
false;
282 std::unique_ptr<weld::TreeIter> xChild(
mxLbTree->make_iterator(&rEntry));
287 OSL_ASSERT(pUserData);
295 while (
mxLbTree->iter_next_sibling(*xChild));
350 std::unique_ptr<weld::TreeIter> xParent(
mxLbTree->make_iterator(&rEntry));
354 OSL_ASSERT(pUserData);
388 std::unique_ptr<weld::TreeIter> xChild(
mxLbTree->make_iterator(&rEntry));
389 if (!
mxLbTree->iter_children(*xChild))
395 }
while (
mxLbTree->iter_next_sibling(*xChild));
400 std::unique_ptr<weld::TreeIter> xParent(
mxLbTree->make_iterator(pEntry));
401 if (!
mxLbTree->iter_parent(*xParent))
413 while (
mxLbTree->iter_parent(*xParent));
419 std::unique_ptr<weld::TreeIter> xChild(
mxLbTree->make_iterator(pEntry));
420 if (!
mxLbTree->iter_children(*xChild))
426 OSL_ASSERT(pUserData);
437 }
while (
mxLbTree->iter_next_sibling(*xChild));
451 std::unique_ptr<weld::TreeIter> xChild(rTree.
make_iterator(&rEntry));
458 OUString aPath = getXPath(rTree, *xChild, rNamespaces);
468 if (pUserData->
mbLeafNode && !aPath.isEmpty())
474 getFieldLinks(rRangeLink, rNamespaces, rTree, *xChild);
478 void removeDuplicates(std::vector<size_t>& rArray)
480 std::sort(rArray.begin(), rArray.end());
481 std::vector<size_t>::iterator it = std::unique(rArray.begin(), rArray.end());
482 rArray.erase(it, rArray.end());
535 pShell->Broadcast(
SfxHint(SfxHintId::ScDataChanged));
599 mxBtnOk->set_sensitive(bHasLink);
604 if (&rBtn == mxBtnSelectSource.get())
606 else if (&rBtn == mxBtnOk.get())
608 else if (&rBtn == mxBtnCancel.get())
std::unique_ptr< weld::TreeIter > mxCurRefEntry
#define LINK(Instance, Class, Member)
EntryType meType
numerical ID for xml namespace
SC_DLLPUBLIC void Format(OStringBuffer &r, ScRefFlags nFlags, const ScDocument *pDocument=nullptr, const Details &rDetails=detailsOOOa1) const
OUString maImgElementRepeat
Collection of orcus filter wrappers.
virtual bool iter_parent(TreeIter &rIter) const =0
std::unique_ptr< weld::Label > mxFtSourceFile
std::unique_ptr< sal_Int32[]> pData
void RepeatElementSelected(const weld::TreeIter &rEntry)
ScOrcusXMLTreeParam maXMLParam
void LoadSourceFileStructure(const OUString &rPath)
static EntryData * getUserData(const weld::TreeView &rControl, const weld::TreeIter &rEntry)
void DefaultElementSelected(const weld::TreeIter &rEntry)
SC_DLLPUBLIC formula::FormulaGrammar::AddressConvention GetAddressConvention() const
IMPL_LINK(ScXMLSourceDlg, BtnPressedHdl, weld::Button &, rBtn, void)
virtual std::unique_ptr< TreeIter > make_iterator(const TreeIter *pOrig=nullptr) const =0
virtual void Close() override
std::unique_ptr< ScOrcusXMLContext > mpXMLContext
std::unique_ptr< formula::RefButton > mxRefBtn
std::unique_ptr< formula::RefEdit > mxRefEdit
OString OUStringToOString(std::u16string_view str, ConnectionSettings const *settings)
std::vector< RangeLink > maRangeLinks
IMPL_LINK_NOARG(ScXMLSourceDlg, TreeItemSelectHdl, weld::TreeView &, void)
void SetContext(Context _eNewContext)
virtual void SetActive() override
virtual void Deactivate() override
formula::RefEdit * mpActiveEdit
virtual std::unique_ptr< ScOrcusXMLContext > createXMLContext(ScDocument &rDoc, const OUString &rPath) const =0
Create a context for XML file.
std::set< std::unique_ptr< weld::TreeIter >, CustomCompare > maRangeLinks
virtual bool IsRefInputMode() const override
bool mbRangeParent
linked cell position (invalid if unlinked)
virtual void RefInputDone(bool bForced=false) override
virtual OUString get_text(int row, int col=-1) const =0
bool IsChildrenDirty(const weld::TreeIter *pEntry) const
void AttributeSelected(const weld::TreeIter &rEntry)
std::vector< OString > maFieldPaths
std::vector< OString > maRowGroups
bool IsParentDirty(const weld::TreeIter *pEntry) const
Check if any of its parents is linked or repeated.
virtual bool iter_children(TreeIter &rIter) const =0
OUString GetMainURL(DecodeMechanism eMechanism, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8) const
std::vector< size_t > maNamespaces
OUString maImgElementDefault
static ScTabViewShell * GetActiveViewShell()
std::vector< CellLink > maCellLinks
std::unique_ptr< weld::Button > mxBtnCancel
std::unique_ptr< weld::Button > mxBtnSelectSource
std::unique_ptr< weld::TreeView > mxLbTree
std::unique_ptr< weld::Container > mxMapGrid
Reference< XExecutableDialog > m_xDialog
std::set< std::unique_ptr< weld::TreeIter >, CustomCompare > maCellLinks
void SelectAllChildEntries(const weld::TreeIter &rEntry)
SfxObjectShell * GetDocumentShell() const
virtual bool iter_next_sibling(TreeIter &rIter) const =0
SC_DLLPUBLIC ScRefFlags Parse(const OUString &, const ScDocument &, const Details &rDetails=detailsOOOa1, ExternalInfo *pExtInfo=nullptr, const css::uno::Sequence< css::sheet::ExternalLinkInfo > *pExternalLinks=nullptr, sal_Int32 *pSheetEndPos=nullptr, const OUString *pErrRef=nullptr)
virtual ~ScXMLSourceDlg() override
virtual void SetReference(const ScRange &rRange, ScDocument &rDoc) override
ScXMLSourceDlg(SfxBindings *pB, SfxChildWindow *pCW, weld::Window *pParent, ScDocument *pDoc)
bool DoClose(sal_uInt16 nId)
Custom data stored with each tree item.
std::unique_ptr< weld::Button > mxBtnOk
virtual void RefInputStart(formula::RefEdit *pEdit, formula::RefButton *pButton=nullptr) override
bool removeSegment(sal_Int32 nIndex=LAST_SEGMENT, bool bIgnoreFinalSlash=true)
bool m_bDetectedRangeSegmentation false