LibreOffice Module cui (master)  1
tplneend.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 <tools/urlobj.hxx>
21 #include <vcl/settings.hxx>
22 #include <vcl/svapp.hxx>
23 #include <vcl/weld.hxx>
24 #include <unotools/pathoptions.hxx>
25 #include <sfx2/filedlghelper.hxx>
26 #include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
27 
28 #include <strings.hrc>
29 #include <svx/dialmgr.hxx>
30 #include <svx/dlgctrl.hxx>
31 #include <svx/svdobj.hxx>
32 #include <svx/svdopath.hxx>
33 #include <svx/xtable.hxx>
34 #include <svx/xlineit0.hxx>
35 #include <svx/xlnwtit.hxx>
36 #include <svx/xlnclit.hxx>
37 #include <svx/xlnstwit.hxx>
38 #include <svx/xlnedwit.hxx>
39 #include <svx/xlnstit.hxx>
40 #include <svx/xlnedit.hxx>
41 #include <cuitabline.hxx>
42 #include <cuitabarea.hxx>
43 #include <svx/svxdlg.hxx>
44 #include <dialmgr.hxx>
48 #include <svx/strings.hrc>
49 
50 #define XOUT_WIDTH 150
51 
53  : SfxTabPage(pPage, pController, "cui/ui/lineendstabpage.ui", "LineEndPage", &rInAttrs)
54  , rOutAttrs(rInAttrs)
55  , pPolyObj(nullptr)
56  , aXLineAttr(rInAttrs.GetPool())
57  , rXLSet(aXLineAttr.GetItemSet())
58  , pnLineEndListState(nullptr)
59  , pPageType(nullptr)
60  , nDlgType(0)
61  , pPosLineEndLb(nullptr)
62  , m_xEdtName(m_xBuilder->weld_entry("EDT_NAME"))
63  , m_xLbLineEnds(new SvxLineEndLB(m_xBuilder->weld_combo_box("LB_LINEENDS")))
64  , m_xBtnAdd(m_xBuilder->weld_button("BTN_ADD"))
65  , m_xBtnModify(m_xBuilder->weld_button("BTN_MODIFY"))
66  , m_xBtnDelete(m_xBuilder->weld_button("BTN_DELETE"))
67  , m_xBtnLoad(m_xBuilder->weld_button("BTN_LOAD"))
68  , m_xBtnSave(m_xBuilder->weld_button("BTN_SAVE"))
69  , m_xCtlPreview(new weld::CustomWeld(*m_xBuilder, "CTL_PREVIEW", m_aCtlPreview))
70 {
71  // this page needs ExchangeSupport
73 
74  rXLSet.Put( XLineStyleItem(css::drawing::LineStyle_SOLID) );
76  rXLSet.Put( XLineColorItem( OUString(), COL_BLACK ) );
79 
80  // #i34740#
82 
83  m_xBtnAdd->connect_clicked(LINK(this, SvxLineEndDefTabPage, ClickAddHdl_Impl));
84  m_xBtnModify->connect_clicked(LINK( this, SvxLineEndDefTabPage, ClickModifyHdl_Impl));
85  m_xBtnDelete->connect_clicked(LINK( this, SvxLineEndDefTabPage, ClickDeleteHdl_Impl));
86  m_xBtnLoad->connect_clicked(LINK( this, SvxLineEndDefTabPage, ClickLoadHdl_Impl));
87  m_xBtnSave->connect_clicked(LINK( this, SvxLineEndDefTabPage, ClickSaveHdl_Impl));
88 
90 }
91 
93 {
94  m_xCtlPreview.reset();
95  m_xLbLineEnds.reset();
96 }
97 
99 {
100  m_xLbLineEnds->Fill( pLineEndList );
101 
102  bool bCreateArrowPossible = true;
103 
104  if( !pPolyObj )
105  {
106  bCreateArrowPossible = false;
107  }
108  else if( nullptr == dynamic_cast<const SdrPathObj*>( pPolyObj) )
109  {
110  SdrObjTransformInfoRec aInfoRec;
111  pPolyObj->TakeObjInfo( aInfoRec );
112  SdrObjectUniquePtr pNewObj;
113  if( aInfoRec.bCanConvToPath )
114  pNewObj = pPolyObj->ConvertToPolyObj( true, false );
115 
116  bCreateArrowPossible = nullptr != dynamic_cast<const SdrPathObj*>( pNewObj.get());
117  }
118 
119  if( !bCreateArrowPossible )
120  m_xBtnAdd->set_sensitive(false);
121 }
122 
124 {
125  if( nDlgType == 0 ) // area dialog
126  {
127  // ActivatePage() is called before the dialog receives PageCreated() !!!
128  if( pLineEndList.is() )
129  {
130  if( *pPosLineEndLb != -1)
131  {
132  m_xLbLineEnds->set_active(*pPosLineEndLb);
134  }
135  INetURLObject aURL( pLineEndList->GetPath() );
136 
137  aURL.Append( pLineEndList->GetName() );
138  DBG_ASSERT( aURL.GetProtocol() != INetProtocol::NotValid, "invalid URL" );
139  *pPageType = PageType::Area; // 3
140  *pPosLineEndLb = -1;
141  }
142  }
143 }
144 
145 
147 {
149 
150  if( _pSet )
151  FillItemSet( _pSet );
152 
153  return DeactivateRC::LeavePage;
154 }
155 
156 
158 {
159  int nPos = m_xLbLineEnds->get_active();
160 
161  if (nPos != -1)
162  {
163  OUString aString = m_xEdtName->get_text();
164 
165  if( aString != m_xLbLineEnds->get_active_text() )
166  {
167  std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "cui/ui/querychangelineenddialog.ui"));
168  std::unique_ptr<weld::MessageDialog> xQueryBox(xBuilder->weld_message_dialog("AskChangeLineEndDialog"));
169  if (xQueryBox->run() == RET_YES)
170  ClickModifyHdl_Impl(*m_xBtnModify);
171  }
172  }
173  nPos = m_xLbLineEnds->get_active();
174 
175  if (nPos != -1)
176  *pPosLineEndLb = nPos;
177 }
178 
179 
181 {
182  if( nDlgType == 0 ) // line dialog
183  {
184  if( *pPageType == PageType::Bitmap )
185  {
187 
188  int nPos = m_xLbLineEnds->get_active();
189  const XLineEndEntry* pEntry = pLineEndList->GetLineEnd(nPos);
190 
191  rSet->Put( XLineStartItem( pEntry->GetName(), pEntry->GetLineEnd() ) );
192  rSet->Put( XLineEndItem( pEntry->GetName(), pEntry->GetLineEnd() ) );
193  }
194  }
195  return true;
196 }
197 
199 {
200  m_xLbLineEnds->set_active(0);
201 
202  // Update lineend
203  if( pLineEndList->Count() > 0 )
204  {
205  int nPos = m_xLbLineEnds->get_active();
206 
207  const XLineEndEntry* pEntry = pLineEndList->GetLineEnd(nPos);
208 
209  m_xEdtName->set_text(m_xLbLineEnds->get_active_text());
210 
211  rXLSet.Put( XLineStartItem( OUString(), pEntry->GetLineEnd() ) );
212  rXLSet.Put( XLineEndItem( OUString(), pEntry->GetLineEnd() ) );
213 
214  // #i34740#
216  m_aCtlPreview.Invalidate();
217  }
218 
219  // determine button state
220  if( pLineEndList->Count() )
221  {
222  m_xBtnModify->set_sensitive(true);
223  m_xBtnDelete->set_sensitive(true);
224  m_xBtnSave->set_sensitive(true);
225  }
226  else
227  {
228  m_xBtnModify->set_sensitive(false);
229  m_xBtnDelete->set_sensitive(false);
230  m_xBtnSave->set_sensitive(false);
231  }
232 }
233 
234 std::unique_ptr<SfxTabPage> SvxLineEndDefTabPage::Create(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet* rSet)
235 {
236  return std::make_unique<SvxLineEndDefTabPage>(pPage, pController, *rSet );
237 }
238 
240 {
241  if( pLineEndList->Count() > 0 )
242  {
243  int nPos = m_xLbLineEnds->get_active();
244 
245  const XLineEndEntry* pEntry = pLineEndList->GetLineEnd(nPos);
246 
247  m_xEdtName->set_text(m_xLbLineEnds->get_active_text());
248 
249  rXLSet.Put( XLineStartItem( OUString(), pEntry->GetLineEnd() ) );
250  rXLSet.Put( XLineEndItem( OUString(), pEntry->GetLineEnd() ) );
251 
252  // #i34740#
254  m_aCtlPreview.Invalidate();
255 
256  // Is not set before, in order to only take the new style,
257  // if there is an entry selected in the ListBox
259  }
260 }
261 
262 IMPL_LINK_NOARG(SvxLineEndDefTabPage, SelectLineEndHdl_Impl, weld::ComboBox&, void)
263 {
264  SelectLineEndHdl_Impl();
265 }
266 
267 IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickModifyHdl_Impl, weld::Button&, void)
268 {
269  int nPos = m_xLbLineEnds->get_active();
270  if (nPos != -1)
271  {
272  OUString aDesc(CuiResId(RID_SVXSTR_DESC_LINEEND));
273  OUString aName(m_xEdtName->get_text());
274  long nCount = pLineEndList->Count();
275  bool bDifferent = true;
276 
277  // check whether the name is existing already
278  for ( long i = 0; i < nCount && bDifferent; i++ )
279  if ( aName == pLineEndList->GetLineEnd( i )->GetName() )
280  bDifferent = false;
281 
282  // if yes, repeat and demand a new name
283  if ( !bDifferent )
284  {
285  std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "cui/ui/queryduplicatedialog.ui"));
286  std::unique_ptr<weld::MessageDialog> xWarningBox(xBuilder->weld_message_dialog("DuplicateNameDialog"));
287  xWarningBox->run();
288 
291  bool bLoop = true;
292 
293  while( !bDifferent && bLoop && pDlg->Execute() == RET_OK )
294  {
295  pDlg->GetName( aName );
296  bDifferent = true;
297 
298  for( long i = 0; i < nCount && bDifferent; i++ )
299  {
300  if( aName == pLineEndList->GetLineEnd( i )->GetName() )
301  bDifferent = false;
302  }
303 
304  if( bDifferent )
305  bLoop = false;
306  else
307  xWarningBox->run();
308  }
309  }
310 
311  // if not existing, enter the entry
312  if( bDifferent )
313  {
314  const XLineEndEntry* pOldEntry = pLineEndList->GetLineEnd(nPos);
315 
316  if(pOldEntry)
317  {
318  // #123497# Need to replace the existing entry with a new one
319  pLineEndList->Replace(std::make_unique<XLineEndEntry>(pOldEntry->GetLineEnd(), aName), nPos);
320 
321  m_xEdtName->set_text(aName);
322 
323  m_xLbLineEnds->Modify(*pLineEndList->GetLineEnd(nPos), nPos, pLineEndList->GetUiBitmap(nPos));
324  m_xLbLineEnds->set_active(nPos);
325 
326  // set flag for modified
327  *pnLineEndListState |= ChangeType::MODIFIED;
328 
329  *pPageType = PageType::Bitmap;
330  }
331  else
332  {
333  OSL_ENSURE(false, "LineEnd to be modified not existing (!)");
334  }
335  }
336  }
337 }
338 
340 {
341  if( pPolyObj )
342  {
343  const SdrObject* pNewObj;
344  SdrObjectUniquePtr pConvPolyObj;
345 
346  if( nullptr != dynamic_cast<const SdrPathObj*>( pPolyObj) )
347  {
348  pNewObj = pPolyObj;
349  }
350  else
351  {
352  SdrObjTransformInfoRec aInfoRec;
353  pPolyObj->TakeObjInfo( aInfoRec );
354 
355  if( aInfoRec.bCanConvToPath )
356  {
357  pConvPolyObj = pPolyObj->ConvertToPolyObj( true, false );
358  pNewObj = pConvPolyObj.get();
359 
360  if( !pNewObj || nullptr == dynamic_cast<const SdrPathObj*>( pNewObj) )
361  return; // cancel, additional safety, which
362  // has no use for group objects though.
363  }
364  else return; // cancel
365  }
366 
367  basegfx::B2DPolyPolygon aNewPolyPolygon(static_cast<const SdrPathObj*>(pNewObj)->GetPathPoly());
368  basegfx::B2DRange aNewRange(basegfx::utils::getRange(aNewPolyPolygon));
369 
370  // normalize
371  aNewPolyPolygon.transform(basegfx::utils::createTranslateB2DHomMatrix( -aNewRange.getMinX(), -aNewRange.getMinY()));
372 
373  pConvPolyObj.reset();
374 
375  OUString aNewName(SvxResId(RID_SVXSTR_LINEEND));
376  OUString aDesc(CuiResId(RID_SVXSTR_DESC_LINEEND));
377  OUString aName;
378 
379  long nCount = pLineEndList->Count();
380  long j = 1;
381  bool bDifferent = false;
382 
383  while ( !bDifferent )
384  {
385  aName = aNewName + " " + OUString::number( j++ );
386  bDifferent = true;
387 
388  for( long i = 0; i < nCount && bDifferent; i++ )
389  if ( aName == pLineEndList->GetLineEnd( i )->GetName() )
390  bDifferent = false;
391  }
392 
395  bool bLoop = true;
396 
397  while ( bLoop && pDlg->Execute() == RET_OK )
398  {
399  pDlg->GetName( aName );
400  bDifferent = true;
401 
402  for( long i = 0; i < nCount && bDifferent; i++ )
403  {
404  if( aName == pLineEndList->GetLineEnd( i )->GetName() )
405  bDifferent = false;
406  }
407 
408  if( bDifferent )
409  {
410  bLoop = false;
411 
412  auto nLineEndCount = pLineEndList->Count();
413  pLineEndList->Insert(std::make_unique<XLineEndEntry>(aNewPolyPolygon, aName), nLineEndCount);
414 
415  // add to the ListBox
416  m_xLbLineEnds->Append(*pLineEndList->GetLineEnd(nLineEndCount), pLineEndList->GetUiBitmap(nLineEndCount));
417  m_xLbLineEnds->set_active(m_xLbLineEnds->get_count() - 1);
418 
419  *pnLineEndListState |= ChangeType::MODIFIED;
420 
421  SelectLineEndHdl_Impl();
422  }
423  else
424  {
425  std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "cui/ui/queryduplicatedialog.ui"));
426  std::unique_ptr<weld::MessageDialog> xWarningBox(xBuilder->weld_message_dialog("DuplicateNameDialog"));
427  xWarningBox->run();
428  }
429  }
430  }
431  else
432  m_xBtnAdd->set_sensitive(false);
433 
434  // determine button state
435  if ( pLineEndList->Count() )
436  {
437  m_xBtnModify->set_sensitive(true);
438  m_xBtnDelete->set_sensitive(true);
439  m_xBtnSave->set_sensitive(true);
440  }
441 }
442 
443 IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickDeleteHdl_Impl, weld::Button&, void)
444 {
445  int nPos = m_xLbLineEnds->get_active();
446 
447  if (nPos != -1)
448  {
449  std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "cui/ui/querydeletelineenddialog.ui"));
450  std::unique_ptr<weld::MessageDialog> xQueryBox(xBuilder->weld_message_dialog("AskDelLineEndDialog"));
451 
452  if (xQueryBox->run() == RET_YES)
453  {
454  pLineEndList->Remove(nPos);
455  m_xLbLineEnds->remove(nPos);
456  m_xLbLineEnds->set_active(0);
457 
458  SelectLineEndHdl_Impl();
459  *pPageType = PageType::Area; // LineEnd shall not be taken over
460 
461  *pnLineEndListState |= ChangeType::MODIFIED;
462 
463  m_aCtlPreview.Invalidate();
464  }
465  }
466  // determine button state
467  if( !pLineEndList->Count() )
468  {
469  m_xBtnModify->set_sensitive(false);
470  m_xBtnDelete->set_sensitive(false);
471  m_xBtnSave->set_sensitive(false);
472  }
473 }
474 
476 {
477  sal_uInt16 nReturn = RET_YES;
478 
479  if ( *pnLineEndListState & ChangeType::MODIFIED )
480  {
481  std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "cui/ui/querysavelistdialog.ui"));
482  std::unique_ptr<weld::MessageDialog> xBox(xBuilder->weld_message_dialog("AskSaveList"));
483 
484  nReturn = xBox->run();
485 
486  if ( nReturn == RET_YES )
487  pLineEndList->Save();
488  }
489 
490  if ( nReturn != RET_CANCEL )
491  {
492  ::sfx2::FileDialogHelper aDlg(css::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE,
493  FileDialogFlags::NONE, GetFrameWeld());
494  OUString aStrFilterType( "*.soe" );
495  aDlg.AddFilter( aStrFilterType, aStrFilterType );
496 
497  OUString aPalettePath(SvtPathOptions().GetPalettePath());
498  OUString aLastDir;
499  sal_Int32 nIndex = 0;
500  do
501  {
502  aLastDir = aPalettePath.getToken(0, ';', nIndex);
503  }
504  while (nIndex >= 0);
505 
506  INetURLObject aFile(aLastDir);
508 
509  if( aDlg.Execute() == ERRCODE_NONE )
510  {
511  INetURLObject aURL( aDlg.GetPath() );
512  INetURLObject aPathURL( aURL );
513 
514  aPathURL.removeSegment();
515  aPathURL.removeFinalSlash();
516 
519  XPropertyListType::LineEnd,
520  aPathURL.GetMainURL(INetURLObject::DecodeMechanism::NONE), ""));
521  pLeList->SetName( aURL.getName() );
522  if( pLeList->Load() )
523  {
524  pLineEndList = pLeList;
525  static_cast<SvxLineTabDialog*>(GetDialogController())->SetNewLineEndList( pLineEndList );
526  m_xLbLineEnds->clear();
527  m_xLbLineEnds->Fill( pLineEndList );
528  Reset( &rOutAttrs );
529 
530  pLineEndList->SetName( aURL.getName() );
531 
532  *pnLineEndListState |= ChangeType::CHANGED;
533  *pnLineEndListState &= ~ChangeType::MODIFIED;
534  }
535  else
536  {
537  std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "cui/ui/querynoloadedfiledialog.ui"));
538  std::unique_ptr<weld::MessageDialog> xBox(xBuilder->weld_message_dialog("NoLoadedFileDialog"));
539  xBox->run();
540  }
541  }
542  }
543 
544  // determine button state
545  if ( pLineEndList->Count() )
546  {
547  m_xBtnModify->set_sensitive(true);
548  m_xBtnDelete->set_sensitive(true);
549  m_xBtnSave->set_sensitive(true);
550  }
551  else
552  {
553  m_xBtnModify->set_sensitive(false);
554  m_xBtnDelete->set_sensitive(false);
555  m_xBtnSave->set_sensitive(false);
556  }
557 }
558 
560 {
561  ::sfx2::FileDialogHelper aDlg(css::ui::dialogs::TemplateDescription::FILESAVE_SIMPLE, FileDialogFlags::NONE, GetFrameWeld());
562  OUString aStrFilterType( "*.soe" );
563  aDlg.AddFilter( aStrFilterType, aStrFilterType );
564 
565  OUString aPalettePath(SvtPathOptions().GetPalettePath());
566  OUString aLastDir;
567  sal_Int32 nIndex = 0;
568  do
569  {
570  aLastDir = aPalettePath.getToken(0, ';', nIndex);
571  }
572  while (nIndex >= 0);
573 
574  INetURLObject aFile(aLastDir);
575  DBG_ASSERT( aFile.GetProtocol() != INetProtocol::NotValid, "invalid URL" );
576 
577  if( !pLineEndList->GetName().isEmpty() )
578  {
579  aFile.Append( pLineEndList->GetName() );
580 
581  if( aFile.getExtension().isEmpty() )
582  aFile.SetExtension( "soe" );
583  }
584 
586  if ( aDlg.Execute() == ERRCODE_NONE )
587  {
588  INetURLObject aURL( aDlg.GetPath() );
589  INetURLObject aPathURL( aURL );
590 
591  aPathURL.removeSegment();
592  aPathURL.removeFinalSlash();
593 
594  pLineEndList->SetName( aURL.getName() );
595  pLineEndList->SetPath( aPathURL.GetMainURL( INetURLObject::DecodeMechanism::NONE ) );
596 
597  if( pLineEndList->Save() )
598  {
599  *pnLineEndListState &= ~ChangeType::MODIFIED;
600  }
601  else
602  {
603  std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "cui/ui/querynosavefiledialog.ui"));
604  std::unique_ptr<weld::MessageDialog> xBox(xBuilder->weld_message_dialog("NoSaveFileDialog"));
605  xBox->run();
606  }
607  }
608 }
609 
610 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
std::unique_ptr< weld::Entry > m_xEdtName
Definition: cuitabline.hxx:334
virtual void TakeObjInfo(SdrObjTransformInfoRec &rInfo) const
constexpr::Color COL_BLACK(0x00, 0x00, 0x00)
std::unique_ptr< weld::Button > m_xBtnDelete
Definition: cuitabline.hxx:338
void AddFilter(const OUString &rFilterName, const OUString &rExtension)
virtual void Reset(const SfxItemSet *) override
Definition: tplneend.cxx:198
const SdrObject * pPolyObj
Definition: cuitabline.hxx:321
static XLineEndListRef AsLineEndList(rtl::Reference< XPropertyList > const &plist)
long Height() const
Size GetOutputSize() const
OUString GetPath() const
static SvxAbstractDialogFactory * Create()
std::unique_ptr< weld::Button > m_xBtnLoad
Definition: cuitabline.hxx:339
SfxItemSet & rXLSet
Definition: cuitabline.hxx:324
void SetLineAttributes(const SfxItemSet &rItemSet)
void SetDisplayDirectory(const OUString &rPath)
virtual bool FillItemSet(SfxItemSet *) override
Definition: tplneend.cxx:180
virtual DeactivateRC DeactivatePage(SfxItemSet *pSet) override
Definition: tplneend.cxx:146
XLineEndListRef pLineEndList
Definition: cuitabline.hxx:326
RET_CANCEL
static std::unique_ptr< SfxTabPage > Create(weld::Container *pPage, weld::DialogController *pController, const SfxItemSet *)
Definition: tplneend.cxx:234
virtual VclPtr< AbstractSvxNameDialog > CreateSvxNameDialog(weld::Window *pParent, const OUString &rName, const OUString &rDesc)=0
RET_YES
OUString SvxResId(const char *pId)
void SetExchangeSupport()
void SetExtension(OUString const &rTheExtension)
SvxLineEndDefTabPage(weld::Container *pPage, weld::DialogController *pController, const SfxItemSet &rInAttrs)
Definition: tplneend.cxx:52
void SelectLineEndHdl_Impl()
Definition: tplneend.cxx:239
ChangeType
const OUString & GetName() const
std::unique_ptr< weld::Button > m_xBtnAdd
Definition: cuitabline.hxx:336
#define DBG_ASSERT(sCon, aError)
bool Append(OUString const &rTheSegment, EncodeMechanism eMechanism=EncodeMechanism::WasEncoded, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8)
virtual ~SvxLineEndDefTabPage() override
Definition: tplneend.cxx:92
int i
const SfxItemSet * GetItemSet(const SfxPoolItem &rAttr)
void transform(const basegfx::B2DHomMatrix &rMatrix)
IMPL_LINK_NOARG(SvxLineEndDefTabPage, SelectLineEndHdl_Impl, weld::ComboBox &, void)
Definition: tplneend.cxx:262
SvxXLinePreview m_aCtlPreview
Definition: cuitabline.hxx:333
std::unique_ptr< weld::Button > m_xBtnSave
Definition: cuitabline.hxx:340
static XPropertyListRef CreatePropertyList(XPropertyListType t, const OUString &rPath, const OUString &rReferer)
OUString CuiResId(const char *pKey)
Definition: cuiresmgr.cxx:23
B2DRange getRange(const B2DPolygon &rCandidate)
OUString GetMainURL(DecodeMechanism eMechanism, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8) const
const basegfx::B2DPolyPolygon & GetLineEnd() const
std::unique_ptr< weld::CustomWeld > m_xCtlPreview
Definition: cuitabline.hxx:341
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
SdrObjectUniquePtr ConvertToPolyObj(bool bBezier, bool bLineToArea) const
double getMinY() const
weld::Window * GetFrameWeld() const
#define XOUT_WIDTH
Definition: tplneend.cxx:50
#define ERRCODE_NONE
std::unique_ptr< weld::Button > m_xBtnModify
Definition: cuitabline.hxx:337
INetProtocol GetProtocol() const
RET_OK
XLineAttrSetItem aXLineAttr
Definition: cuitabline.hxx:323
std::unique_ptr< SdrObject, SdrObjectFreeOp > SdrObjectUniquePtr
virtual void ActivatePage(const SfxItemSet &rSet) override
Definition: tplneend.cxx:123
sal_Int32 * pPosLineEndLb
Definition: cuitabline.hxx:331
DeactivateRC
OString const aName
static weld::Builder * CreateBuilder(weld::Widget *pParent, const OUString &rUIFile)
double getMinX() const
B2DHomMatrix createTranslateB2DHomMatrix(double fTranslateX, double fTranslateY)
sal_Int32 nPos
weld::Window * GetFrameWeld(const SfxFrame *pFrame)
std::unique_ptr< SvxLineEndLB > m_xLbLineEnds
Definition: cuitabline.hxx:335
OUString getExtension(sal_Int32 nIndex=LAST_SEGMENT, bool bIgnoreFinalSlash=true, DecodeMechanism eMechanism=DecodeMechanism::ToIUri, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8) const