22 #include <strings.hxx>
23 #include <bitmaps.hlst>
25 #include <UITools.hxx>
27 #include <com/sun/star/report/XReportDefinition.hpp>
28 #include <com/sun/star/report/XFixedText.hpp>
29 #include <com/sun/star/report/XFixedLine.hpp>
30 #include <com/sun/star/report/XFormattedField.hpp>
31 #include <com/sun/star/report/XImageControl.hpp>
32 #include <com/sun/star/report/XShape.hpp>
34 #include <strings.hrc>
35 #include <rptui_slotid.hrc>
45 #include <core_resource.hxx>
46 #include <rtl/ref.hxx>
47 #include <svx/svxids.hrc>
50 #include <string_view>
58 static OUString
lcl_getImageId(
const uno::Reference< report::XReportComponent>& _xElement)
61 uno::Reference< report::XFixedLine> xFixedLine(_xElement,uno::UNO_QUERY);
62 if ( uno::Reference< report::XFixedText>(_xElement,uno::UNO_QUERY).is() )
63 sId = RID_SVXBMP_FM_FIXEDTEXT;
64 else if ( xFixedLine.is() )
65 sId = xFixedLine->getOrientation() ? OUString(RID_SVXBMP_INSERT_VFIXEDLINE) : OUString(RID_SVXBMP_INSERT_HFIXEDLINE);
66 else if ( uno::Reference< report::XFormattedField>(_xElement,uno::UNO_QUERY).is() )
67 sId = RID_SVXBMP_FM_EDIT;
68 else if ( uno::Reference< report::XImageControl>(_xElement,uno::UNO_QUERY).is() )
69 sId = RID_SVXBMP_FM_IMAGECONTROL;
70 else if ( uno::Reference< report::XShape>(_xElement,uno::UNO_QUERY).is() )
71 sId = RID_SVXBMP_DRAWTBX_CS_BASIC;
75 static OUString
lcl_getName(
const uno::Reference< beans::XPropertySet>& _xElement)
77 OSL_ENSURE(_xElement.is(),
"Found report element which is NULL!");
80 OUStringBuffer
sName(sTempName);
81 uno::Reference< report::XFixedText> xFixedText(_xElement,uno::UNO_QUERY);
82 uno::Reference< report::XReportControlModel> xReportModel(_xElement,uno::UNO_QUERY);
83 if ( xFixedText.is() )
86 sName.append(xFixedText->getLabel());
88 else if ( xReportModel.is() && _xElement->getPropertySetInfo()->hasPropertyByName(
PROPERTY_DATAFIELD) )
91 if ( aFormula.isValid() )
94 sName.append( aFormula.getUndecoratedContent() );
97 return sName.makeStringAndClear();
118 UserData(NavigatorTree* pTree,
const uno::Reference<uno::XInterface>& xContent);
121 const uno::Reference< uno::XInterface >& getContent()
const {
return m_xContent; }
122 void setContent(
const uno::Reference< uno::XInterface >& _xContent) { m_xContent = _xContent; }
126 virtual void _propertyChanged(
const beans::PropertyChangeEvent& _rEvent)
override;
129 virtual void _elementInserted(
const container::ContainerEvent& _rEvent )
override;
130 virtual void _elementRemoved(
const container::ContainerEvent& Event )
override;
131 virtual void _elementReplaced(
const container::ContainerEvent& _rEvent )
override;
132 virtual void _disposing(
const lang::EventObject& _rSource)
override;
143 void traverseSection(
const uno::Reference<report::XSection>& xSection,
const weld::TreeIter* pParent,
const OUString& rImageId,
int nPosition = -1);
144 void traverseFunctions(
const uno::Reference< report::XFunctions>& xFunctions,
const weld::TreeIter* pParent);
148 virtual void _disposing(
const lang::EventObject& _rSource)
override;
151 virtual void _propertyChanged(
const beans::PropertyChangeEvent& _rEvent)
override;
154 void _elementInserted(
const container::ContainerEvent& _rEvent );
155 void _elementRemoved(
const container::ContainerEvent& Event );
156 void _elementReplaced(
const container::ContainerEvent& _rEvent );
159 NavigatorTree(std::unique_ptr<weld::TreeView>, OReportController& rController);
160 virtual ~NavigatorTree()
override;
165 virtual void _selectionChanged(
const lang::EventObject& aEvent )
override;
168 virtual void traverseReport(
const uno::Reference< report::XReportDefinition>& xReport)
override;
169 virtual void traverseReportFunctions(
const uno::Reference< report::XFunctions>& xFunctions)
override;
170 virtual void traverseReportHeader(
const uno::Reference< report::XSection>& xSection)
override;
171 virtual void traverseReportFooter(
const uno::Reference< report::XSection>& xSection)
override;
172 virtual void traversePageHeader(
const uno::Reference< report::XSection>& xSection)
override;
173 virtual void traversePageFooter(
const uno::Reference< report::XSection>& xSection)
override;
175 virtual void traverseGroups(
const uno::Reference< report::XGroups>& xGroups)
override;
176 virtual void traverseGroup(
const uno::Reference< report::XGroup>& xGroup)
override;
177 virtual void traverseGroupFunctions(
const uno::Reference< report::XFunctions>& xFunctions)
override;
178 virtual void traverseGroupHeader(
const uno::Reference< report::XSection>& xSection)
override;
179 virtual void traverseGroupFooter(
const uno::Reference< report::XSection>& xSection)
override;
181 virtual void traverseDetail(
const uno::Reference< report::XSection>& xSection)
override;
184 void removeEntry(
const weld::TreeIter& rEntry,
bool bRemove =
true);
186 void grab_focus() { m_xTreeView->grab_focus(); }
190 m_xTreeView->set_text(rIter, rStr);
195 m_xTreeView->expand_row(rIter);
198 std::unique_ptr<weld::TreeIter> make_iterator()
const
200 return m_xTreeView->make_iterator();
205 return m_xTreeView->iter_n_children(rIter);
211 NavigatorTree::NavigatorTree(std::unique_ptr<weld::TreeView> xTreeView, OReportController& rController)
213 , m_xTreeView(
std::move(xTreeView))
214 , m_rController(rController)
216 m_xTreeView->set_size_request(m_xTreeView->get_approximate_digit_width() * 25, m_xTreeView->get_height_rows(18));
218 m_pReportListener =
new OPropertyChangeMultiplexer(
this,m_rController.getReportDefinition());
224 m_pSelectionListener =
new OSelectionChangeMultiplexer(
this,&m_rController);
228 m_xTreeView->set_selection_mode(SelectionMode::Multiple);
230 m_xTreeView->connect_changed(
LINK(
this, NavigatorTree, OnEntrySelDesel));
231 m_xTreeView->connect_popup_menu(
LINK(
this, NavigatorTree, CommandHdl));
234 NavigatorTree::~NavigatorTree()
237 UserData*
pData = weld::fromId<UserData*>(m_xTreeView->get_id(rIter));
241 m_pReportListener->dispose();
246 sal_uInt16 mapIdent(std::string_view rIdent)
248 if (rIdent ==
"sorting")
249 return SID_SORTINGANDGROUPING;
250 else if (rIdent ==
"page")
251 return SID_PAGEHEADERFOOTER;
252 else if (rIdent ==
"report")
253 return SID_REPORTHEADERFOOTER;
254 else if (rIdent ==
"function")
255 return SID_RPT_NEW_FUNCTION;
256 else if (rIdent ==
"properties")
257 return SID_SHOW_PROPERTYBROWSER;
258 else if (rIdent ==
"delete")
266 bool bHandled =
false;
267 switch( rEvt.GetCommand())
269 case CommandEventId::ContextMenu:
271 UserData* pData = weld::fromId<UserData*>(m_xTreeView->get_selected_id());
275 uno::Reference< report::XFunctionsSupplier> xSupplier(pData->getContent(),uno::UNO_QUERY);
276 uno::Reference< report::XFunctions> xFunctions(pData->getContent(),uno::UNO_QUERY);
277 uno::Reference< report::XGroup> xGroup(pData->getContent(),uno::UNO_QUERY);
278 bool bDeleteAllowed = m_rController.isEditable() && (xGroup.is() ||
279 uno::Reference< report::XFunction>(pData->getContent(),uno::UNO_QUERY).is());
281 std::unique_ptr<weld::Builder> xBuilder(
Application::CreateBuilder(m_xTreeView.get(),
"modules/dbreport/ui/navigatormenu.ui"));
282 std::unique_ptr<weld::Menu> xContextMenu(xBuilder->weld_menu(
"menu"));
284 const OString aIds[] = {
"sorting",
"page",
"report",
"function",
"properties",
"delete" };
287 sal_uInt16 nSId = mapIdent(aIds[
i]);
289 if (aIds[i] ==
"page" || aIds[i] ==
"report" || aIds[i] ==
"properties")
290 xContextMenu->set_active(aIds[i], m_rController.isCommandChecked(nSId));
291 bool bEnabled = m_rController.isCommandEnabled(nSId);
292 if (nSId == SID_RPT_NEW_FUNCTION)
293 xContextMenu->set_sensitive(aIds[i], m_rController.isEditable() && (xSupplier.is() || xFunctions.is()));
295 else if (nSId == SID_DELETE)
296 xContextMenu->set_sensitive(aIds[i], bDeleteAllowed);
298 xContextMenu->set_sensitive(aIds[i], bEnabled);
302 ::Point aWhere(rEvt.GetMousePosPixel());
303 OString sCurItemIdent = xContextMenu->popup_at_rect(m_xTreeView.get(),
tools::Rectangle(aWhere,
Size(1,1)));
304 if (!sCurItemIdent.isEmpty())
306 sal_uInt16
nId = mapIdent(sCurItemIdent);
307 uno::Sequence< beans::PropertyValue> aArgs;
308 if ( nId == SID_RPT_NEW_FUNCTION )
311 aArgs.getArray()[0].Value <<= (xFunctions.is() ? xFunctions : xSupplier->getFunctions());
313 else if ( nId == SID_DELETE )
316 nId = SID_GROUP_REMOVE;
319 m_rController.executeUnChecked(nId,aArgs);
333 if ( !m_pSelectionListener->locked() )
335 m_pSelectionListener->lock();
336 std::unique_ptr<weld::TreeIter> xEntry = m_xTreeView->make_iterator();
337 bool bEntry = m_xTreeView->get_cursor(xEntry.get());
339 if (bEntry && m_xTreeView->is_selected(*xEntry))
340 aSelection <<= weld::fromId<UserData*>(m_xTreeView->get_id(*xEntry))->getContent();
341 m_rController.select(aSelection);
342 m_pSelectionListener->unlock();
346 void NavigatorTree::_selectionChanged(
const lang::EventObject& aEvent )
348 m_pSelectionListener->lock();
349 uno::Reference< view::XSelectionSupplier> xSelectionSupplier(aEvent.Source,uno::UNO_QUERY);
350 uno::Any aSec = xSelectionSupplier->getSelection();
351 uno::Sequence< uno::Reference< report::XReportComponent > > aSelection;
353 std::unique_ptr<weld::TreeIter> xEntry = m_xTreeView->make_iterator();
354 if ( !aSelection.hasElements() )
356 uno::Reference< uno::XInterface> xSelection(aSec,uno::UNO_QUERY);
357 bool bEntry =
find(xSelection, *xEntry);
358 if (bEntry && !m_xTreeView->is_selected(*xEntry))
360 m_xTreeView->select(*xEntry);
361 m_xTreeView->set_cursor(*xEntry);
364 m_xTreeView->unselect_all();
368 for (
const uno::Reference<report::XReportComponent>& rElem : std::as_const(aSelection))
370 bool bEntry =
find(rElem, *xEntry);
371 if (bEntry && !m_xTreeView->is_selected(*xEntry))
373 m_xTreeView->select(*xEntry);
374 m_xTreeView->set_cursor(*xEntry);
378 m_pSelectionListener->unlock();
381 void NavigatorTree::insertEntry(
const OUString& rName,
const weld::TreeIter* pParent,
const OUString& rImageId,
385 m_xTreeView->insert(pParent, nPosition, &rName, &sId,
nullptr,
nullptr,
false, &rRet);
386 if (!rImageId.isEmpty())
387 m_xTreeView->set_image(rRet, rImageId);
390 void NavigatorTree::traverseSection(
const uno::Reference<report::XSection>& xSection,
const weld::TreeIter* pParent,
const OUString& rImageId,
int nPosition)
392 std::unique_ptr<weld::TreeIter> xSectionIter = m_xTreeView->make_iterator();
393 std::unique_ptr<weld::TreeIter> xScratch = m_xTreeView->make_iterator();
394 insertEntry(xSection->getName(), pParent, rImageId, nPosition,
new UserData(
this, xSection), *xSectionIter);
395 const sal_Int32
nCount = xSection->getCount();
396 for (sal_Int32 i = 0;
i < nCount; ++
i)
398 uno::Reference< report::XReportComponent> xElement(xSection->getByIndex(i), uno::UNO_QUERY_THROW);
400 uno::Reference< report::XReportDefinition> xSubReport(xElement,uno::UNO_QUERY);
401 if ( xSubReport.is() )
403 bool bMasterReport =
find(xSection->getReportDefinition(), *xScratch);
405 m_xMasterReport.reset();
407 m_xMasterReport = m_xTreeView->make_iterator(xScratch.get());
409 aSubVisitor.start(xSubReport);
414 void NavigatorTree::traverseFunctions(
const uno::Reference< report::XFunctions>& xFunctions,
const weld::TreeIter* pParent)
416 std::unique_ptr<weld::TreeIter> xFunctionIter = m_xTreeView->make_iterator();
417 std::unique_ptr<weld::TreeIter> xScratch = m_xTreeView->make_iterator();
418 insertEntry(
RptResId(RID_STR_FUNCTIONS), pParent, RID_SVXBMP_RPT_NEW_FUNCTION, -1,
new UserData(
this, xFunctions), *xFunctionIter);
419 const sal_Int32 nCount = xFunctions->getCount();
420 for (sal_Int32 i = 0;
i< nCount; ++
i)
422 uno::Reference< report::XFunction> xElement(xFunctions->getByIndex(i),uno::UNO_QUERY);
423 insertEntry(xElement->getName(), xFunctionIter.get(), RID_SVXBMP_RPT_NEW_FUNCTION, -1,
new UserData(
this,xElement), *xScratch);
427 bool NavigatorTree::find(
const uno::Reference<uno::XInterface>& xContent,
weld::TreeIter& rRet)
432 m_xTreeView->all_foreach([
this, &xContent, &bRet, &rRet](
weld::TreeIter& rIter) {
433 UserData* pData = weld::fromId<UserData*>(m_xTreeView->get_id(rIter));
434 if (pData->getContent() == xContent)
436 m_xTreeView->copy_iterator(rIter, rRet);
448 void NavigatorTree::traverseReport(
const uno::Reference< report::XReportDefinition>& xReport)
450 std::unique_ptr<weld::TreeIter> xScratch = m_xTreeView->make_iterator();
451 insertEntry(xReport->getName(), m_xMasterReport.get(), RID_SVXBMP_SELECT_REPORT,-1,
new UserData(
this, xReport), *xScratch);
454 void NavigatorTree::traverseReportFunctions(
const uno::Reference< report::XFunctions>& xFunctions)
456 std::unique_ptr<weld::TreeIter> xReport = m_xTreeView->make_iterator();
457 bool bReport =
find(xFunctions->getParent(), *xReport);
460 traverseFunctions(xFunctions, xReport.get());
463 void NavigatorTree::traverseReportHeader(
const uno::Reference< report::XSection>& xSection)
465 std::unique_ptr<weld::TreeIter> xReport = m_xTreeView->make_iterator();
466 bool bReport =
find(xSection->getReportDefinition(), *xReport);
469 traverseSection(xSection, xReport.get(), RID_SVXBMP_REPORTHEADERFOOTER);
472 void NavigatorTree::traverseReportFooter(
const uno::Reference< report::XSection>& xSection)
474 std::unique_ptr<weld::TreeIter> xReport = m_xTreeView->make_iterator();
475 bool bReport =
find(xSection->getReportDefinition(), *xReport);
478 traverseSection(xSection, xReport.get(), RID_SVXBMP_REPORTHEADERFOOTER);
481 void NavigatorTree::traversePageHeader(
const uno::Reference< report::XSection>& xSection)
483 std::unique_ptr<weld::TreeIter> xReport = m_xTreeView->make_iterator();
484 bool bReport =
find(xSection->getReportDefinition(), *xReport);
487 traverseSection(xSection, xReport.get(), RID_SVXBMP_PAGEHEADERFOOTER);
490 void NavigatorTree::traversePageFooter(
const uno::Reference< report::XSection>& xSection)
492 std::unique_ptr<weld::TreeIter> xReport = m_xTreeView->make_iterator();
493 bool bReport =
find(xSection->getReportDefinition(), *xReport);
496 traverseSection(xSection, xReport.get(), RID_SVXBMP_PAGEHEADERFOOTER);
499 void NavigatorTree::traverseGroups(
const uno::Reference< report::XGroups>& xGroups)
501 std::unique_ptr<weld::TreeIter> xReport = m_xTreeView->make_iterator();
502 bool bReport =
find(xGroups->getReportDefinition(), *xReport);
505 std::unique_ptr<weld::TreeIter> xScratch = m_xTreeView->make_iterator();
506 insertEntry(
RptResId(RID_STR_GROUPS), xReport.get(), RID_SVXBMP_SORTINGANDGROUPING, -1,
new UserData(
this, xGroups), *xScratch);
509 void NavigatorTree::traverseGroup(
const uno::Reference< report::XGroup>& xGroup)
511 uno::Reference< report::XGroups> xGroups(xGroup->getParent(),uno::UNO_QUERY);
512 std::unique_ptr<weld::TreeIter> xGroupsIter = m_xTreeView->make_iterator();
513 bool bGroups =
find(xGroups, *xGroupsIter);
514 OSL_ENSURE(bGroups,
"No Groups inserted so far. Why!");
517 std::unique_ptr<weld::TreeIter> xScratch = m_xTreeView->make_iterator();
521 void NavigatorTree::traverseGroupFunctions(
const uno::Reference< report::XFunctions>& xFunctions)
523 std::unique_ptr<weld::TreeIter> xReport = m_xTreeView->make_iterator();
524 bool bReport =
find(xFunctions->getParent(), *xReport);
527 traverseFunctions(xFunctions, xReport.get());
530 void NavigatorTree::traverseGroupHeader(
const uno::Reference< report::XSection>& xSection)
532 std::unique_ptr<weld::TreeIter> xReport = m_xTreeView->make_iterator();
533 bool bReport =
find(xSection->getGroup(), *xReport);
534 OSL_ENSURE(bReport,
"No group found");
537 traverseSection(xSection, xReport.get(), RID_SVXBMP_GROUPHEADER, 1);
540 void NavigatorTree::traverseGroupFooter(
const uno::Reference< report::XSection>& xSection)
542 std::unique_ptr<weld::TreeIter> xReport = m_xTreeView->make_iterator();
543 bool bReport =
find(xSection->getGroup(), *xReport);
544 OSL_ENSURE(bReport,
"No group found");
547 traverseSection(xSection, xReport.get(), RID_SVXBMP_GROUPFOOTER);
550 void NavigatorTree::traverseDetail(
const uno::Reference< report::XSection>& xSection)
552 uno::Reference< report::XReportDefinition> xReport = xSection->getReportDefinition();
553 std::unique_ptr<weld::TreeIter> xParent = m_xTreeView->make_iterator();
554 bool bParent =
find(xReport, *xParent);
557 traverseSection(xSection, xParent.get(), RID_SVXBMP_ICON_DETAIL);
560 void NavigatorTree::_propertyChanged(
const beans::PropertyChangeEvent& _rEvent)
562 uno::Reference< report::XReportDefinition> xReport(_rEvent.Source,uno::UNO_QUERY);
566 bool bEnabled =
false;
567 _rEvent.NewValue >>= bEnabled;
571 std::unique_ptr<weld::TreeIter> xParent = m_xTreeView->make_iterator();
572 bool bParent =
find(xReport, *xParent);
578 traverseSection(xReport->getReportHeader(),xParent.get(),RID_SVXBMP_REPORTHEADERFOOTER,nPos);
582 traverseSection(xReport->getPageHeader(),xParent.get(), RID_SVXBMP_PAGEHEADERFOOTER,1);
585 traverseSection(xReport->getPageFooter(),xParent.get(), RID_SVXBMP_PAGEHEADERFOOTER);
589 if (xReport->getPageFooterOn() && xParent)
590 nPos = m_xTreeView->iter_n_children(*xParent) - 1;
591 traverseSection(xReport->getReportFooter(),xParent.get(),RID_SVXBMP_REPORTHEADERFOOTER,nPos);
595 void NavigatorTree::_elementInserted(
const container::ContainerEvent& _rEvent )
597 std::unique_ptr<weld::TreeIter> xEntry = m_xTreeView->make_iterator();
598 bool bEntry =
find(_rEvent.Source, *xEntry);
601 uno::Reference<beans::XPropertySet> xProp(_rEvent.Element,uno::UNO_QUERY_THROW);
603 uno::Reference< beans::XPropertySetInfo> xInfo = xProp->getPropertySetInfo();
611 uno::Reference< report::XGroup> xGroup(xProp,uno::UNO_QUERY);
615 aSubVisitor.start(xGroup);
619 uno::Reference< report::XReportComponent> xElement(xProp,uno::UNO_QUERY);
622 std::unique_ptr<weld::TreeIter> xScratch = m_xTreeView->make_iterator();
623 insertEntry(sName, xEntry.get(), (!xElement.is() ? OUString(RID_SVXBMP_RPT_NEW_FUNCTION) :
lcl_getImageId(xElement)),
624 -1, new
UserData(this,xProp), *xScratch);
626 if (bEntry && !m_xTreeView->get_row_expanded(*xEntry))
627 m_xTreeView->expand_row(*xEntry);
630 void NavigatorTree::_elementRemoved(
const container::ContainerEvent& _rEvent )
632 uno::Reference<beans::XPropertySet> xProp(_rEvent.Element,uno::UNO_QUERY);
633 std::unique_ptr<weld::TreeIter> xEntry = m_xTreeView->make_iterator();
634 bool bEntry =
find(xProp, *xEntry);
635 OSL_ENSURE(bEntry,
"NavigatorTree::_elementRemoved: No Entry found!");
639 removeEntry(*xEntry);
643 void NavigatorTree::_elementReplaced(
const container::ContainerEvent& _rEvent )
645 uno::Reference<beans::XPropertySet> xProp(_rEvent.ReplacedElement,uno::UNO_QUERY);
646 std::unique_ptr<weld::TreeIter> xEntry = m_xTreeView->make_iterator();
647 bool bEntry =
find(xProp, *xEntry);
650 UserData* pData = weld::fromId<UserData*>(m_xTreeView->get_id(*xEntry));
651 xProp.set(_rEvent.Element,uno::UNO_QUERY);
652 pData->setContent(xProp);
655 m_xTreeView->set_text(*xEntry, sName);
659 void NavigatorTree::_disposing(
const lang::EventObject& _rSource)
661 std::unique_ptr<weld::TreeIter> xEntry = m_xTreeView->make_iterator();
662 if (
find(_rSource.Source, *xEntry))
663 removeEntry(*xEntry);
666 void NavigatorTree::removeEntry(
const weld::TreeIter& rEntry,
bool bRemove)
668 std::unique_ptr<weld::TreeIter> xChild = m_xTreeView->make_iterator(&rEntry);
669 bool bChild = m_xTreeView->iter_children(*xChild);
672 removeEntry(*xChild,
false);
673 bChild = m_xTreeView->iter_next_sibling(*xChild);
675 delete weld::fromId<UserData*>(m_xTreeView->get_id(rEntry));
677 m_xTreeView->remove(rEntry);
680 NavigatorTree::UserData::UserData(NavigatorTree* pTree,
const uno::Reference<uno::XInterface>& xContent)
686 uno::Reference<beans::XPropertySet> xProp(
m_xContent,uno::UNO_QUERY);
689 uno::Reference< beans::XPropertySetInfo> xInfo = xProp->getPropertySetInfo();
692 m_pListener = new ::comphelper::OPropertyChangeMultiplexer(
this,xProp);
707 uno::Reference< container::XContainer> xContainer(
m_xContent,uno::UNO_QUERY);
708 if ( xContainer.is() )
714 NavigatorTree::UserData::~UserData()
723 void NavigatorTree::UserData::_propertyChanged(
const beans::PropertyChangeEvent& _rEvent)
725 std::unique_ptr<weld::TreeIter> xEntry =
m_pTree->make_iterator();
726 bool bEntry =
m_pTree->find(_rEvent.Source, *xEntry);
727 OSL_ENSURE(bEntry,
"No entry could be found! Why not!");
736 uno::Reference< report::XGroup> xGroup(_rEvent.Source,uno::UNO_QUERY);
737 ::std::function<bool(OGroupHelper *)> pIsOn = ::std::mem_fn(&OGroupHelper::getHeaderOn);
738 ::std::function<uno::Reference<report::XSection>(OGroupHelper *)> pMemFunSection = ::std::mem_fn(&OGroupHelper::getHeader);
741 pIsOn = ::std::mem_fn(&OGroupHelper::getFooterOn);
742 pMemFunSection = ::std::mem_fn(&OGroupHelper::getFooter);
743 nPos =
m_pTree->iter_n_children(*xEntry) - 1;
746 OGroupHelper aGroupHelper(xGroup);
747 if ( pIsOn(&aGroupHelper) )
751 m_pTree->traverseSection(pMemFunSection(&aGroupHelper),xEntry.get(),bFooterOn ? OUString(RID_SVXBMP_GROUPFOOTER) : OUString(RID_SVXBMP_GROUPHEADER),nPos);
757 _rEvent.NewValue >>= sNewName;
758 m_pTree->set_text(*xEntry, sNewName);
762 uno::Reference<beans::XPropertySet> xProp(_rEvent.Source,uno::UNO_QUERY);
766 catch(
const uno::Exception &)
770 void NavigatorTree::UserData::_elementInserted(
const container::ContainerEvent& _rEvent )
772 m_pTree->_elementInserted( _rEvent );
775 void NavigatorTree::UserData::_elementRemoved(
const container::ContainerEvent& _rEvent )
777 m_pTree->_elementRemoved( _rEvent );
780 void NavigatorTree::UserData::_elementReplaced(
const container::ContainerEvent& _rEvent )
782 m_pTree->_elementReplaced( _rEvent );
785 void NavigatorTree::UserData::_disposing(
const lang::EventObject& _rSource)
787 m_pTree->_disposing( _rSource );
802 : m_xReport(rController.getReportDefinition())
803 , m_xNavigatorTree(
std::make_unique<NavigatorTree>(rBuilder.weld_tree_view(
"treeview"), rController))
807 std::unique_ptr<weld::TreeIter> xScratch =
m_xNavigatorTree->make_iterator();
810 lang::EventObject aEvent(rController);
815 : GenericDialogController(pParent,
"modules/dbreport/ui/floatingnavigator.ui",
"FloatingNavigator")
818 m_pImpl->m_xNavigatorTree->grab_focus();
830 m_pImpl->m_xNavigatorTree->grab_focus();
#define LINK(Instance, Class, Member)
std::shared_ptr< weld::Dialog > m_xDialog
OReportController & m_rController
DECL_LINK(CheckNameHdl, SvxNameDialog &, bool)
#define PROPERTY_HEADERON
std::unique_ptr< weld::Builder > m_xBuilder
std::unique_ptr< sal_Int32[]> pData
IMPL_LINK_NOARG(ONavigator, FocusChangeHdl, weld::Container &, void)
css::beans::PropertyValue makePropertyValue(const OUString &rName, T &&rValue)
uno::Reference< report::XReportDefinition > m_xReport
#define PROPERTY_FOOTERON
IMPL_LINK(NavigatorTree, CommandHdl, const CommandEvent &, rEvt, bool)
OSQLColumns::const_iterator find(const OSQLColumns::const_iterator &first, const OSQLColumns::const_iterator &last, std::u16string_view _rVal, const ::comphelper::UStringMixEqual &_rCase)
::rtl::Reference< comphelper::OContainerListenerAdapter > m_pContainerListener
#define PROPERTY_DATAFIELD
#define PROPERTY_PAGEHEADERON
::std::unique_ptr< ONavigatorImpl > m_pImpl
#define SAL_N_ELEMENTS(arr)
#define PROPERTY_REPORTFOOTERON
OUString RptResId(TranslateId aId)
IMPL_LINK_NOARG(OAddFieldWindow, FocusChangeHdl, weld::Container &, void)
std::unique_ptr< weld::TreeIter > m_xMasterReport
::rtl::Reference< comphelper::OPropertyChangeMultiplexer > m_pReportListener
std::unique_ptr< NavigatorTree > m_xNavigatorTree
ONavigator(const ONavigator &)=delete
::rtl::Reference< comphelper::OSelectionChangeMultiplexer > m_pSelectionListener
static OUString lcl_getImageId(const uno::Reference< report::XReportComponent > &_xElement)
#define PROPERTY_EXPRESSION
OUString toId(const void *pValue)
sal_Int32 getPositionInIndexAccess(const css::uno::Reference< css::container::XIndexAccess > &_xCollection, const css::uno::Reference< T > &_xSearch)
returns the position of the object inside the index container
#define PROPERTY_REPORTHEADERON
constexpr OStringLiteral HID_REPORT_NAVIGATOR_TREE
std::unique_ptr< weld::TreeView > m_xTreeView
void start(const css::uno::Reference< css::report::XReportDefinition > &_xReportDefinition)
Reference< XExecutableDialog > m_xDialog
uno::Reference< uno::XInterface > m_xContent
::rtl::Reference< comphelper::OPropertyChangeMultiplexer > m_pListener
#define PROPERTY_PAGEFOOTERON
static std::unique_ptr< weld::Builder > CreateBuilder(weld::Widget *pParent, const OUString &rUIFile, bool bMobile=false, sal_uInt64 nLOKWindowId=0)
static OUString lcl_getName(const uno::Reference< beans::XPropertySet > &_xElement)