LibreOffice Module reportdesign (master)  1
DesignView.cxx
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
11  * Licensed to the Apache Software Foundation (ASF) under one or more
12  * contributor license agreements. See the NOTICE file distributed
13  * with this work for additional information regarding copyright
14  * ownership. The ASF licenses this file to you under the Apache
15  * License, Version 2.0 (the "License"); you may not use this file
16  * except in compliance with the License. You may obtain a copy of
17  * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18  */
19 
20 #include <DesignView.hxx>
21 #include <ReportController.hxx>
23 #include <unotools/viewoptions.hxx>
24 #include <RptDef.hxx>
25 #include <UITools.hxx>
26 #include <RptObject.hxx>
27 #include <propbrw.hxx>
28 #include <helpids.h>
29 #include <SectionView.hxx>
30 #include <ReportSection.hxx>
31 #include <rptui_slotid.hrc>
32 #include <AddField.hxx>
33 #include <ScrollHelper.hxx>
34 #include <Navigator.hxx>
35 #include <SectionWindow.hxx>
36 
37 #include <vcl/settings.hxx>
38 #include <vcl/svapp.hxx>
39 
40 #include <algorithm>
41 
42 namespace rptui
43 {
44 using namespace ::dbaui;
45 using namespace ::utl;
46 using namespace ::com::sun::star;
47 using namespace uno;
48 using namespace lang;
49 using namespace beans;
50 using namespace container;
51 
52 #define START_SIZE_TASKPANE 30
53 #define COLSET_ID 1
54 #define REPORT_ID 2
55 #define TASKPANE_ID 3
56 
57 namespace {
58 
59 class OTaskWindow : public vcl::Window
60 {
62 public:
63  explicit OTaskWindow(vcl::Window* _pParent) : Window(_pParent),m_pPropWin(nullptr){}
64  virtual ~OTaskWindow() override { disposeOnce(); }
65  virtual void dispose() override { m_pPropWin.clear(); vcl::Window::dispose(); }
66 
67  void setPropertyBrowser(PropBrw* _pPropWin)
68  {
69  m_pPropWin = _pPropWin;
70  }
71 
72  virtual void Resize() override
73  {
74  const Size aSize = GetOutputSizePixel();
75  if ( m_pPropWin && aSize.Height() && aSize.Width() )
76  m_pPropWin->SetSizePixel(aSize);
77  }
78 };
79 
80 }
81 
82 
83 
85  const Reference< XComponentContext >& _rxOrb,
86  OReportController& _rController) :
87  ODataView( pParent, _rController, _rxOrb, WB_DIALOGCONTROL )
88  ,m_aSplitWin(VclPtr<SplitWindow>::Create(this))
89  ,m_rReportController( _rController )
90  ,m_aScrollWindow(VclPtr<rptui::OScrollWindowHelper>::Create(this))
91  ,m_pPropWin(nullptr)
92  ,m_pCurrentView(nullptr)
93  ,m_aMarkIdle("reportdesign ODesignView Mark Idle")
94  ,m_eMode( DlgEdMode::Select )
95  ,m_eActObj( SdrObjKind::NONE )
96  ,m_aGridSizeCoarse( 1000, 1000 ) // #i93595# 100TH_MM changed to grid using coarse 1 cm grid
97  ,m_aGridSizeFine( 250, 250 ) // and a 0,25 cm subdivision for better visualisation
98  ,m_bDeleted( false )
99 {
101  ImplInitSettings();
102 
103  SetMapMode( MapMode( MapUnit::Map100thMM ) );
104 
105  // now create the task pane on the right side :-)
106  m_pTaskPane = VclPtr<OTaskWindow>::Create(this);
107 
108  m_aSplitWin->InsertItem( COLSET_ID,100,SPLITWINDOW_APPEND, 0, SplitWindowItemFlags::PercentSize | SplitWindowItemFlags::ColSet );
109  m_aSplitWin->InsertItem( REPORT_ID, m_aScrollWindow.get(), 100, SPLITWINDOW_APPEND, COLSET_ID, SplitWindowItemFlags::PercentSize);
110 
111  // set up splitter
112  m_aSplitWin->SetSplitHdl(LINK(this, ODesignView,SplitHdl));
113  m_aSplitWin->SetAlign(WindowAlign::Left);
114  m_aSplitWin->Show();
115 
116  m_aMarkIdle.SetInvokeHandler( LINK( this, ODesignView, MarkTimeout ) );
117 }
118 
119 
120 ODesignView::~ODesignView()
121 {
122  disposeOnce();
123 }
124 
125 void ODesignView::dispose()
126 {
127  m_bDeleted = true;
128  Hide();
129  m_aScrollWindow->Hide();
130  m_aMarkIdle.Stop();
131  if ( m_pPropWin )
132  {
134  m_pPropWin.disposeAndClear();
135  }
136  if ( m_xAddField )
137  {
138  SvtViewOptions aDlgOpt( EViewType::Window, UID_RPT_RPT_APP_VIEW );
139  aDlgOpt.SetWindowState(OStringToOUString(m_xAddField->getDialog()->get_window_state(WindowStateMask::All), RTL_TEXTENCODING_ASCII_US));
140 
141  if (m_xAddField->getDialog()->get_visible())
142  m_xAddField->response(RET_CANCEL);
143 
144  m_xAddField.reset();
145  }
146  if ( m_xReportExplorer )
147  {
148  SvtViewOptions aDlgOpt(EViewType::Window, OStringToOUString(m_xReportExplorer->get_help_id(), RTL_TEXTENCODING_UTF8));
149  aDlgOpt.SetWindowState(OStringToOUString(m_xReportExplorer->getDialog()->get_window_state(WindowStateMask::All), RTL_TEXTENCODING_ASCII_US));
150 
151  if (m_xReportExplorer->getDialog()->get_visible())
152  m_xReportExplorer->response(RET_CANCEL);
153 
154  m_xReportExplorer.reset();
155  }
156 
157  m_pTaskPane.disposeAndClear();
158  m_aScrollWindow.disposeAndClear();
159  m_aSplitWin.disposeAndClear();
161 }
162 
163 void ODesignView::initialize()
164 {
165  SetMapMode( MapMode( MapUnit::Map100thMM ) );
166  m_aScrollWindow->initialize();
167  m_aScrollWindow->Show();
168 }
169 
170 void ODesignView::DataChanged( const DataChangedEvent& rDCEvt )
171 {
172  ODataView::DataChanged( rDCEvt );
173 
174  if ( (rDCEvt.GetType() == DataChangedEventType::SETTINGS) &&
175  (rDCEvt.GetFlags() & AllSettingsFlags::STYLE) )
176  {
177  ImplInitSettings();
178  Invalidate();
179  }
180 }
181 
182 bool ODesignView::PreNotify( NotifyEvent& rNEvt )
183 {
184  bool bRet = ODataView::PreNotify(rNEvt); // 1 := has to be handled here
185  switch(rNEvt.GetType())
186  {
187  case MouseNotifyEvent::KEYINPUT:
188  {
189  if ( m_pPropWin && m_pPropWin->HasChildPathFocus() )
190  return false;
191  if (m_xAddField && m_xAddField->getDialog()->has_toplevel_focus())
192  return false;
193  if ( m_xReportExplorer && m_xReportExplorer->getDialog()->has_toplevel_focus())
194  return false;
195  const KeyEvent* pKeyEvent = rNEvt.GetKeyEvent();
196  if ( handleKeyEvent(*pKeyEvent) )
197  bRet = true;
198  else if ( bRet && m_pAccel )
199  {
200  const vcl::KeyCode& rCode = pKeyEvent->GetKeyCode();
201  util::URL aUrl;
202  aUrl.Complete = m_pAccel->findCommand(svt::AcceleratorExecute::st_VCLKey2AWTKey(rCode));
203  if ( aUrl.Complete.isEmpty() || !m_xController->isCommandEnabled( aUrl.Complete ) )
204  bRet = false;
205  }
206  break;
207  }
208  default:
209  break;
210  }
211 
212  return bRet;
213 }
214 
215 void ODesignView::resizeDocumentView(tools::Rectangle& _rPlayground)
216 {
217  if ( !_rPlayground.IsEmpty() )
218  {
219  const Size aPlaygroundSize( _rPlayground.GetSize() );
220 
221  // calc the split pos, and forward it to the controller
222  sal_Int32 nSplitPos = getController().getSplitPos();
223  if ( 0 != aPlaygroundSize.Width() )
224  {
225  if ( ( -1 == nSplitPos )
226  || ( nSplitPos >= aPlaygroundSize.Width() )
227  )
228  {
229  tools::Long nMinWidth = static_cast<tools::Long>(0.1*aPlaygroundSize.Width());
230  if ( m_pPropWin && m_pPropWin->IsVisible() )
231  nMinWidth = m_pPropWin->GetMinOutputSizePixel().Width();
232  nSplitPos = static_cast<sal_Int32>(_rPlayground.Right() - nMinWidth);
233  getController().setSplitPos(nSplitPos);
234  }
235  }
236 
237  if ( m_aSplitWin->IsItemValid(TASKPANE_ID) )
238  {
239  // normalize the split pos
240  const tools::Long nSplitterWidth = StyleSettings::GetSplitSize();
241  Point aTaskPanePos(nSplitPos + nSplitterWidth, _rPlayground.Top());
242  if (m_pTaskPane && m_pTaskPane->IsVisible() && m_pPropWin)
243  {
244  aTaskPanePos.setX( aPlaygroundSize.Width() - m_pTaskPane->GetSizePixel().Width() );
245  sal_Int32 nMinWidth = m_pPropWin->getMinimumSize().Width();
246  if ( nMinWidth > (aPlaygroundSize.Width() - aTaskPanePos.X()) )
247  {
248  aTaskPanePos.setX( aPlaygroundSize.Width() - nMinWidth );
249  }
250  nSplitPos = aTaskPanePos.X() - nSplitterWidth;
251  getController().setSplitPos(nSplitPos);
252 
253  const tools::Long nTaskPaneSize = static_cast<tools::Long>((aPlaygroundSize.Width() - aTaskPanePos.X())*100/aPlaygroundSize.Width());
254  if ( m_aSplitWin->GetItemSize( TASKPANE_ID ) != nTaskPaneSize )
255  {
256  m_aSplitWin->SetItemSize( REPORT_ID, 99 - nTaskPaneSize );
257  m_aSplitWin->SetItemSize( TASKPANE_ID, nTaskPaneSize );
258  }
259  }
260  }
261  // set the size of the report window
262  m_aSplitWin->SetPosSizePixel( _rPlayground.TopLeft(),aPlaygroundSize );
263  }
264  // just for completeness: there is no space left, we occupied it all ...
265  _rPlayground.SetPos( _rPlayground.BottomRight() );
266  _rPlayground.SetSize( Size( 0, 0 ) );
267 
268 }
269 
270 IMPL_LINK_NOARG(ODesignView, MarkTimeout, Timer *, void)
271 {
272  if ( m_pPropWin && m_pPropWin->IsVisible() )
273  {
274  m_pPropWin->Update(m_pCurrentView);
275  uno::Reference<beans::XPropertySet> xProp(m_xReportComponent,uno::UNO_QUERY);
276  if ( xProp.is() )
277  {
278  m_pPropWin->Update(xProp);
279  static_cast<OTaskWindow*>(m_pTaskPane.get())->Resize();
280  }
281  Resize();
282  }
283 }
284 
285 
286 void ODesignView::SetMode( DlgEdMode _eNewMode )
287 {
288  m_eMode = _eNewMode;
289  if ( m_eMode == DlgEdMode::Select )
290  m_eActObj = SdrObjKind::NONE;
291 
292  m_aScrollWindow->SetMode(_eNewMode);
293 }
294 
295 void ODesignView::SetInsertObj( SdrObjKind eObj,const OUString& _sShapeType )
296 {
297  m_eActObj = eObj;
298  m_aScrollWindow->SetInsertObj( eObj,_sShapeType );
299 }
300 
301 OUString const & ODesignView::GetInsertObjString() const
302 {
303  return m_aScrollWindow->GetInsertObjString();
304 }
305 
306 
307 void ODesignView::Cut()
308 {
309  Copy();
310  Delete();
311 }
312 
313 
314 void ODesignView::Copy()
315 {
316  m_aScrollWindow->Copy();
317 }
318 
319 
320 void ODesignView::Paste()
321 {
322  m_aScrollWindow->Paste();
323 }
324 
325 void ODesignView::Delete()
326 {
327  m_aScrollWindow->Delete();
328 }
329 
330 bool ODesignView::HasSelection() const
331 {
332  return m_aScrollWindow->HasSelection();
333 }
334 
335 
336 bool ODesignView::IsPasteAllowed() const
337 {
338  return m_aScrollWindow->IsPasteAllowed();
339 }
340 
341 
342 void ODesignView::UpdatePropertyBrowserDelayed(OSectionView& _rView)
343 {
344  if ( m_pCurrentView != &_rView )
345  {
346  if ( m_pCurrentView )
347  m_aScrollWindow->setMarked(m_pCurrentView,false);
348  m_pCurrentView = &_rView;
349  m_aScrollWindow->setMarked(m_pCurrentView, true);
350  m_xReportComponent.clear();
352  Broadcast( aHint );
353  }
354  m_aMarkIdle.Start();
355 }
356 
357 
358 void ODesignView::toggleGrid(bool _bGridVisible)
359 {
360  m_aScrollWindow->toggleGrid(_bGridVisible);
361 }
362 
363 sal_uInt16 ODesignView::getSectionCount() const
364 {
365  return m_aScrollWindow->getSectionCount();
366 }
367 
368 void ODesignView::showRuler(bool _bShow)
369 {
370  m_aScrollWindow->showRuler(_bShow);
371 }
372 
373 void ODesignView::removeSection(sal_uInt16 _nPosition)
374 {
375  m_aScrollWindow->removeSection(_nPosition);
376 }
377 
378 void ODesignView::addSection(const uno::Reference< report::XSection >& _xSection,const OUString& _sColorEntry,sal_uInt16 _nPosition)
379 {
380  m_aScrollWindow->addSection(_xSection,_sColorEntry,_nPosition);
381 }
382 
383 void ODesignView::GetFocus()
384 {
385  Window::GetFocus();
386 
387  if ( !m_bDeleted )
388  {
389  OSectionWindow* pSectionWindow = m_aScrollWindow->getMarkedSection();
390  if ( pSectionWindow )
391  pSectionWindow->GrabFocus();
392  }
393 }
394 
395 void ODesignView::ImplInitSettings()
396 {
397  SetBackground( Wallpaper( Application::GetSettings().GetStyleSettings().GetFaceColor() ));
398  GetOutDev()->SetFillColor( Application::GetSettings().GetStyleSettings().GetFaceColor() );
399  SetTextFillColor( Application::GetSettings().GetStyleSettings().GetFaceColor() );
400 }
401 
403 {
404  const Size aOutputSize = GetOutputSizePixel();
405  const tools::Long nTest = aOutputSize.Width() * m_aSplitWin->GetItemSize(TASKPANE_ID) / 100;
406  tools::Long nMinWidth = static_cast<tools::Long>(0.1*aOutputSize.Width());
407  if ( m_pPropWin && m_pPropWin->IsVisible() )
408  nMinWidth = m_pPropWin->GetMinOutputSizePixel().Width();
409 
410  if ( (aOutputSize.Width() - nTest) >= nMinWidth && nTest > m_aScrollWindow->getMaxMarkerWidth() )
411  {
412  getController().setSplitPos(nTest);
413  }
414 }
415 
416 void ODesignView::SelectAll(const SdrObjKind _nObjectType)
417 {
418  m_aScrollWindow->SelectAll(_nObjectType);
419 }
420 
421 void ODesignView::unmarkAllObjects()
422 {
423  m_aScrollWindow->unmarkAllObjects();
424 }
425 
426 void ODesignView::togglePropertyBrowser(bool _bToggleOn)
427 {
428  if ( !m_pPropWin && _bToggleOn )
429  {
430  m_pPropWin = VclPtr<PropBrw>::Create(getController().getORB(), m_pTaskPane,this);
431  m_pPropWin->Invalidate();
432  static_cast<OTaskWindow*>(m_pTaskPane.get())->setPropertyBrowser(m_pPropWin);
434  }
435  if ( !(m_pPropWin && _bToggleOn != m_pPropWin->IsVisible()) )
436  return;
437 
438  if ( !m_pCurrentView && !m_xReportComponent.is() )
439  m_xReportComponent = getController().getReportDefinition();
440 
441  const bool bWillBeVisible = _bToggleOn;
442  m_pPropWin->Show(bWillBeVisible);
443  m_pTaskPane->Show(bWillBeVisible);
444  m_pTaskPane->Invalidate();
445 
446  if ( bWillBeVisible )
447  m_aSplitWin->InsertItem( TASKPANE_ID, m_pTaskPane,START_SIZE_TASKPANE, SPLITWINDOW_APPEND, COLSET_ID, SplitWindowItemFlags::PercentSize);
448  else
449  m_aSplitWin->RemoveItem(TASKPANE_ID);
450 
451  if ( bWillBeVisible )
452  m_aMarkIdle.Start();
453 }
454 
455 void ODesignView::showProperties(const uno::Reference< uno::XInterface>& _xReportComponent)
456 {
457  if ( m_xReportComponent != _xReportComponent )
458  {
459  m_xReportComponent = _xReportComponent;
460  if ( m_pCurrentView )
461  m_aScrollWindow->setMarked(m_pCurrentView,false);
462  m_pCurrentView = nullptr;
463  m_aMarkIdle.Start();
464  }
465 }
466 
467 bool ODesignView::isReportExplorerVisible() const
468 {
469  return m_xReportExplorer && m_xReportExplorer->getDialog()->get_visible();
470 }
471 
472 void ODesignView::toggleReportExplorer()
473 {
474  if ( !m_xReportExplorer )
475  {
476  OReportController& rReportController = getController();
477  m_xReportExplorer = std::make_shared<ONavigator>(GetFrameWeld(), rReportController);
478  SvtViewOptions aDlgOpt(EViewType::Window, OStringToOUString(m_xReportExplorer->get_help_id(), RTL_TEXTENCODING_UTF8));
479  if ( aDlgOpt.Exists() )
480  m_xReportExplorer->getDialog()->set_window_state(OUStringToOString(aDlgOpt.GetWindowState(), RTL_TEXTENCODING_ASCII_US));
481  }
482 
483  if (!m_xReportExplorer->getDialog()->get_visible())
484  weld::DialogController::runAsync(m_xReportExplorer, [this](sal_Int32 /*nResult*/) { m_xReportExplorer.reset(); });
485  else
486  m_xReportExplorer->response(RET_CANCEL);
487 }
488 
489 bool ODesignView::isAddFieldVisible() const
490 {
491  return m_xAddField && m_xAddField->getDialog()->get_visible();
492 }
493 
494 void ODesignView::toggleAddField()
495 {
496  if (!m_xAddField)
497  {
498  uno::Reference< report::XReportDefinition > xReport(m_xReportComponent,uno::UNO_QUERY);
499  uno::Reference< report::XReportComponent > xReportComponent(m_xReportComponent,uno::UNO_QUERY);
500  OReportController& rReportController = getController();
501  if ( !m_pCurrentView && !xReport.is() )
502  {
503  if ( xReportComponent.is() )
504  xReport = xReportComponent->getSection()->getReportDefinition();
505  else
506  xReport = rReportController.getReportDefinition().get();
507  }
508  else if ( m_pCurrentView )
509  {
510  uno::Reference< report::XSection > xSection = m_pCurrentView->getReportSection()->getSection();
511  xReport = xSection->getReportDefinition();
512  }
513  uno::Reference < beans::XPropertySet > xSet(rReportController.getRowSet(),uno::UNO_QUERY);
514  m_xAddField = std::make_shared<OAddFieldWindow>(GetFrameWeld(), xSet);
515  m_xAddField->SetCreateHdl(LINK( &rReportController, OReportController, OnCreateHdl ) );
516  SvtViewOptions aDlgOpt( EViewType::Window, UID_RPT_RPT_APP_VIEW );
517  if ( aDlgOpt.Exists() )
518  m_xAddField->getDialog()->set_window_state(OUStringToOString(aDlgOpt.GetWindowState(), RTL_TEXTENCODING_ASCII_US));
519  m_xAddField->Update();
520  }
521  if (!m_xAddField->getDialog()->get_visible())
522  weld::DialogController::runAsync(m_xAddField, [this](sal_Int32 /*nResult*/) { m_xAddField.reset(); });
523  else
524  m_xAddField->response(RET_CANCEL);
525 }
526 
527 uno::Reference< report::XSection > ODesignView::getCurrentSection() const
528 {
529  uno::Reference< report::XSection > xSection;
530  if ( m_pCurrentView )
531  xSection = m_pCurrentView->getReportSection()->getSection();
532 
533  return xSection;
534 }
535 
536 uno::Reference< report::XReportComponent > ODesignView::getCurrentControlModel() const
537 {
538  uno::Reference< report::XReportComponent > xModel;
539  if ( m_pCurrentView )
540  {
541  xModel = m_pCurrentView->getReportSection()->getCurrentControlModel();
542  }
543  return xModel;
544 }
545 
546 OSectionWindow* ODesignView::getMarkedSection(NearSectionAccess nsa) const
547 {
548  return m_aScrollWindow->getMarkedSection(nsa);
549 }
550 
551 OSectionWindow* ODesignView::getSectionWindow(const css::uno::Reference< css::report::XSection>& _xSection) const
552 {
553  return m_aScrollWindow->getSectionWindow(_xSection);
554 }
555 
556 void ODesignView::markSection(const sal_uInt16 _nPos)
557 {
558  m_aScrollWindow->markSection(_nPos);
559 }
560 
561 void ODesignView::fillCollapsedSections(::std::vector<sal_uInt16>& _rCollapsedPositions) const
562 {
563  m_aScrollWindow->fillCollapsedSections(_rCollapsedPositions);
564 }
565 
566 void ODesignView::collapseSections(const uno::Sequence< beans::PropertyValue>& _aCollapsedSections)
567 {
568  m_aScrollWindow->collapseSections(_aCollapsedSections);
569 }
570 
571 OUString ODesignView::getCurrentPage() const
572 {
573  return m_pPropWin ? m_pPropWin->getCurrentPage() : OUString();
574 }
575 
576 void ODesignView::setCurrentPage(const OUString& _sLastActivePage)
577 {
578  if ( m_pPropWin )
579  m_pPropWin->setCurrentPage(_sLastActivePage);
580 }
581 
582 void ODesignView::alignMarkedObjects(ControlModification _nControlModification,bool _bAlignAtSection)
583 {
584  m_aScrollWindow->alignMarkedObjects(_nControlModification, _bAlignAtSection);
585 }
586 
587 bool ODesignView::handleKeyEvent(const KeyEvent& _rEvent)
588 {
589  if ( m_pPropWin && m_pPropWin->HasChildPathFocus() )
590  return false;
591  if (m_xAddField && m_xAddField->getDialog()->has_toplevel_focus())
592  return false;
593  if (m_xReportExplorer && m_xReportExplorer->getDialog()->has_toplevel_focus())
594  return false;
595  return m_aScrollWindow->handleKeyEvent(_rEvent);
596 }
597 
598 void ODesignView::setMarked(const uno::Reference< report::XSection>& _xSection,bool _bMark)
599 {
600  m_aScrollWindow->setMarked(_xSection,_bMark);
601  if ( _bMark )
602  UpdatePropertyBrowserDelayed(getMarkedSection()->getReportSection().getSectionView());
603  else
604  m_pCurrentView = nullptr;
605 }
606 
607 void ODesignView::setMarked(const uno::Sequence< uno::Reference< report::XReportComponent> >& _aShapes,bool _bMark)
608 {
609  m_aScrollWindow->setMarked(_aShapes,_bMark);
610  if ( _aShapes.hasElements() && _bMark )
611  showProperties(_aShapes[0]);
612  else
613  m_xReportComponent.clear();
614 }
615 
616 void ODesignView::MouseButtonDown( const MouseEvent& rMEvt )
617 {
618  if ( rMEvt.IsLeft() )
619  {
620  const uno::Sequence< beans::PropertyValue> aArgs;
621  getController().executeChecked(SID_SELECT_REPORT,aArgs);
622  }
623  ODataView::MouseButtonDown(rMEvt);
624 }
625 
626 uno::Any ODesignView::getCurrentlyShownProperty() const
627 {
628  uno::Any aRet;
629  OSectionWindow* pSectionWindow = getMarkedSection();
630  if ( pSectionWindow )
631  {
632  ::std::vector< uno::Reference< uno::XInterface > > aSelection;
633  pSectionWindow->getReportSection().fillControlModelSelection(aSelection);
634  if ( !aSelection.empty() )
635  {
636  uno::Sequence< uno::Reference< report::XReportComponent > > aSeq(aSelection.size());
637  std::transform(
638  aSelection.begin(), aSelection.end(), aSeq.getArray(),
639  [](const auto& rxInterface)
640  { return uno::Reference<report::XReportComponent>(rxInterface, uno::UNO_QUERY); });
641  aRet <<= aSeq;
642  }
643  }
644  return aRet;
645 }
646 
647 void ODesignView::fillControlModelSelection(::std::vector< uno::Reference< uno::XInterface > >& _rSelection) const
648 {
649  m_aScrollWindow->fillControlModelSelection(_rSelection);
650 }
651 
652 void ODesignView::setGridSnap(bool bOn)
653 {
654  m_aScrollWindow->setGridSnap(bOn);
655 
656 }
657 
658 void ODesignView::setDragStripes(bool bOn)
659 {
660  m_aScrollWindow->setDragStripes(bOn);
661 }
662 
663 bool ODesignView::isHandleEvent() const
664 {
665  return m_pPropWin && m_pPropWin->HasChildPathFocus();
666 }
667 
668 sal_uInt32 ODesignView::getMarkedObjectCount() const
669 {
670  return m_aScrollWindow->getMarkedObjectCount();
671 }
672 
673 void ODesignView::zoom(const Fraction& _aZoom)
674 {
675  m_aScrollWindow->zoom(_aZoom);
676 }
677 
678 sal_uInt16 ODesignView::getZoomFactor(SvxZoomType _eType) const
679 {
680  return m_aScrollWindow->getZoomFactor(_eType);
681 }
682 
683 } // rptui
684 
685 
686 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
void SetPos(const Point &rPoint)
static sal_Int32 GetSplitSize()
virtual void SetHelpId(const OString &) override
#define SPLITWINDOW_APPEND
virtual void dispose() override
void notifySystemWindow(vcl::Window const *pWindow, vcl::Window *pToRegister, const ::comphelper::mem_fun1_t< TaskPaneList, vcl::Window * > &rMemFunc)
notifySystemWindow adds or remove the given window _pToRegister at the Systemwindow found when search...
Definition: UITools.cxx:827
void Create(SwFormatVertOrient &rItem, SvStream &rStrm, sal_uInt16 nVersionAbusedAsSize)
long Long
void disposeAndClear()
static const AllSettings & GetSettings()
static css::awt::KeyEvent st_VCLKey2AWTKey(const vcl::KeyCode &aKey)
DataChangedEventType GetType() const
const KeyEvent * GetKeyEvent() const
virtual void dispose() override
#define UID_RPT_RPT_APP_VIEW
Definition: helpids.h:29
RET_CANCEL
SdrObjKind
ODesignView(ODesignView const &)=delete
constexpr tools::Long Width() const
static bool runAsync(const std::shared_ptr< DialogController > &rController, const std::function< void(sal_Int32)> &)
IMPL_LINK_NOARG(ODesignView, SplitHdl, SplitWindow *, void)
Definition: DesignView.cxx:402
#define REPORT_ID
Definition: DesignView.cxx:54
AllSettingsFlags GetFlags() const
ControlModification
Definition: RptDef.hxx:48
OString OUStringToOString(std::u16string_view str, ConnectionSettings const *settings)
constexpr bool IsEmpty() const
OReportSection & getReportSection()
WinBits const WB_DIALOGCONTROL
void clear()
void SetSize(const Size &rSize)
void SetWindowState(const OUString &sState)
constexpr tools::Long Right() const
constexpr tools::Long Top() const
MouseNotifyEvent GetType() const
css::uno::Reference< css::sdbc::XRowSet > const & getRowSet()
returns the RowSet which reflects the current settings of the report definition
OUString GetWindowState() const
#define TASKPANE_ID
Definition: DesignView.cxx:55
void GrabFocus()
VclPtr< PropBrw > m_pPropWin
Definition: DesignView.cxx:61
constexpr Point TopLeft() const
void fillControlModelSelection(::std::vector< css::uno::Reference< css::uno::XInterface > > &_rSelection) const
fills the vector with all selected control models /param _rSelection The vector will be filled and wi...
#define COLSET_ID
Definition: DesignView.cxx:53
const vcl::KeyCode & GetKeyCode() const
constexpr Size GetSize() const
constexpr tools::Long Height() const
#define START_SIZE_TASKPANE
Definition: DesignView.cxx:52
bool IsLeft() const
mem_fun1_t< Tp, Arg > mem_fun(void(Tp::*f)(Arg))
static VclPtr< reference_type > Create(Arg &&...arg)
bool Exists() const
Sequence< sal_Int8 > aSeq
void RemoveWindow(vcl::Window *pWindow)
constexpr Point BottomRight() const
Reference< XModel > xModel
void AddWindow(vcl::Window *pWindow)
SvxZoomType
void dispose()
weld::Window * GetFrameWeld(const SfxFrame *pFrame)
const css::uno::Reference< css::report::XReportDefinition > & getReportDefinition() const
gives access to the report definition
bool m_bDetectedRangeSegmentation false