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