11 #include <bitmaps.hlst>
12 #include <document.hxx>
23 #include <com/sun/star/ui/dialogs/XFilePicker3.hpp>
24 #include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp>
25 #include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
44 std::unique_ptr<weld::TreeIter> xEntry(rTree.
make_iterator(&rEntry));
53 aBuf.insert(0, rTree.
get_text(*xEntry, 0));
54 if (isAttribute(rTree, *xEntry))
61 return aBuf.makeStringAndClear();
70 , mbDlgLostFocus(false)
71 , mxBtnSelectSource(m_xBuilder->weld_button(
"selectsource"))
72 , mxFtSourceFile(m_xBuilder->weld_label(
"sourcefile"))
73 , mxMapGrid(m_xBuilder->weld_container(
"mapgrid"))
74 , mxLbTree(m_xBuilder->weld_tree_view(
"tree"))
75 , mxRefEdit(new
formula::RefEdit(m_xBuilder->weld_entry(
"edit")))
76 , mxRefBtn(new
formula::RefButton(m_xBuilder->weld_button(
"ref")))
77 , mxBtnOk(m_xBuilder->weld_button(
"ok"))
78 , mxBtnCancel(m_xBuilder->weld_button(
"cancel"))
79 , maCustomCompare(*mxLbTree)
80 , maCellLinks(maCustomCompare)
81 , maRangeLinks(maCustomCompare)
85 mxLbTree->set_selection_mode(SelectionMode::Multiple);
97 mxBtnOk->connect_clicked(aBtnHdl);
159 DoClose(ScXMLSourceDlgWrapper::GetChildWindowId());
167 uno::Reference<ui::dialogs::XFilePicker3> xFilePicker = aDlgHelper.
GetFilePicker();
179 xFilePicker->setDisplayDirectory(aPath);
182 if (xFilePicker->execute() != ui::dialogs::ExecutableDialogResults::OK)
186 uno::Sequence<OUString> aFiles = xFilePicker->getSelectedFiles();
187 if (!aFiles.hasElements())
219 std::unique_ptr<weld::TreeIter> xParent(rTree.
make_iterator(&rCurEntry));
221 std::unique_ptr<weld::TreeIter> xRefEntry;
225 OSL_ASSERT(pUserData);
237 std::unique_ptr<weld::TreeIter> xCurEntry(rTree.
make_iterator(&rCurEntry));
245 std::unique_ptr<weld::TreeIter> xEntry(
mxLbTree->make_iterator());
246 if (!
mxLbTree->get_cursor(xEntry.get()))
255 OSL_ASSERT(pUserData);
266 switch (pUserData->
meType)
284 if (
mxLbTree->iter_has_child(rEntry))
287 bool bHasChild =
false;
288 std::unique_ptr<weld::TreeIter> xChild(
mxLbTree->make_iterator(&rEntry));
293 OSL_ASSERT(pUserData);
301 while (
mxLbTree->iter_next_sibling(*xChild));
356 std::unique_ptr<weld::TreeIter> xParent(
mxLbTree->make_iterator(&rEntry));
360 OSL_ASSERT(pUserData);
394 std::unique_ptr<weld::TreeIter> xChild(
mxLbTree->make_iterator(&rEntry));
395 if (!
mxLbTree->iter_children(*xChild))
401 }
while (
mxLbTree->iter_next_sibling(*xChild));
406 std::unique_ptr<weld::TreeIter> xParent(
mxLbTree->make_iterator(pEntry));
407 if (!
mxLbTree->iter_parent(*xParent))
419 while (
mxLbTree->iter_parent(*xParent));
425 std::unique_ptr<weld::TreeIter> xChild(
mxLbTree->make_iterator(pEntry));
426 if (!
mxLbTree->iter_children(*xChild))
432 OSL_ASSERT(pUserData);
443 }
while (
mxLbTree->iter_next_sibling(*xChild));
457 std::unique_ptr<weld::TreeIter> xChild(rTree.
make_iterator(&rEntry));
464 OUString aPath = getXPath(rTree, *xChild, rNamespaces);
474 if (pUserData->
mbLeafNode && !aPath.isEmpty())
480 getFieldLinks(rRangeLink, rNamespaces, rTree, *xChild);
484 void removeDuplicates(std::vector<size_t>& rArray)
486 std::sort(rArray.begin(), rArray.end());
487 std::vector<size_t>::iterator it = std::unique(rArray.begin(), rArray.end());
488 rArray.erase(it, rArray.end());
541 pShell->Broadcast(
SfxHint(SfxHintId::ScDataChanged));
603 mxBtnOk->set_sensitive(bHasLink);
608 if (&rBtn == mxBtnSelectSource.get())
610 else if (&rBtn == mxBtnOk.get())
612 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< ContentProperties > pData
std::unique_ptr< weld::Label > mxFtSourceFile
ScOrcusXMLTreeParam maXMLParam
void LoadSourceFileStructure(const OUString &rPath)
static EntryData * getUserData(const weld::TreeView &rControl, 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
const BorderLinePrimitive2D *pCandidateB assert(pCandidateA)
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
void RepeatElementSelected(weld::TreeIter &rEntry)
IMPL_LINK_NOARG(ScXMLSourceDlg, TreeItemSelectHdl, weld::TreeView &, void)
virtual void SetActive() override
void AttributeSelected(weld::TreeIter &rEntry)
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.
void DefaultElementSelected(weld::TreeIter &rEntry)
std::set< std::unique_ptr< weld::TreeIter >, CustomCompare > maRangeLinks
virtual bool IsRefInputMode() const override
void SelectAllChildEntries(weld::TreeIter &rEntry)
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
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
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)
const css::uno::Reference< css::ui::dialogs::XFilePicker3 > & GetFilePicker() const
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)