LibreOffice Module cui (master)  1
SvxMenuConfigPage.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 <sal/config.h>
21 #include <sal/log.hxx>
22 
24 #include <vcl/weld.hxx>
25 #include <vcl/svapp.hxx>
26 
27 #include <algorithm>
28 #include <strings.hrc>
29 #include <helpids.h>
30 
31 #include <cfg.hxx>
32 #include <SvxMenuConfigPage.hxx>
33 #include <SvxConfigPageHelper.hxx>
34 #include <dialmgr.hxx>
35 
37 #include <com/sun/star/ui/ImageType.hpp>
38 
39 #include <dlgname.hxx>
40 
41 SvxMenuConfigPage::SvxMenuConfigPage(TabPageParent pParent, const SfxItemSet& rSet, bool bIsMenuBar)
42  : SvxConfigPage(pParent, rSet)
43  , m_bIsMenuBar(bIsMenuBar)
44 {
45  m_xGearBtn = m_xBuilder->weld_menu_button("menugearbtn");
46  m_xGearBtn->show();
47  m_xContentsListBox.reset(new SvxMenuEntriesListBox(m_xBuilder->weld_tree_view("menucontents"), this));
48  weld::TreeView& rTreeView = m_xContentsListBox->get_widget();
49  rTreeView.connect_size_allocate(LINK(this, SvxMenuConfigPage, MenuEntriesSizeAllocHdl));
50  Size aSize(m_xFunctions->get_size_request());
51  rTreeView.set_size_request(aSize.Width(), aSize.Height());
52  MenuEntriesSizeAllocHdl(aSize);
53  rTreeView.set_hexpand(true);
54  rTreeView.set_vexpand(true);
55  rTreeView.show();
56 
57  rTreeView.connect_changed(
58  LINK( this, SvxMenuConfigPage, SelectMenuEntry ) );
59 
60  rTreeView.connect_model_changed(LINK(this, SvxMenuConfigPage, ListModifiedHdl));
61 
62  m_xGearBtn->connect_selected(LINK(this, SvxMenuConfigPage, GearHdl));
63 
64  m_xCommandCategoryListBox->connect_changed(LINK(this, SvxMenuConfigPage, SelectCategory));
65 
66  m_xMoveUpButton->connect_clicked( LINK( this, SvxConfigPage, MoveHdl) );
67  m_xMoveDownButton->connect_clicked( LINK( this, SvxConfigPage, MoveHdl) );
68 
69  m_xAddCommandButton->connect_clicked( LINK( this, SvxMenuConfigPage, AddCommandHdl ) );
70  m_xRemoveCommandButton->connect_clicked( LINK( this, SvxMenuConfigPage, RemoveCommandHdl ) );
71 
72  m_xInsertBtn->connect_selected(
73  LINK( this, SvxMenuConfigPage, InsertHdl ) );
74  m_xModifyBtn->connect_selected(
75  LINK( this, SvxMenuConfigPage, ModifyItemHdl ) );
76  m_xResetBtn->connect_clicked(
77  LINK( this, SvxMenuConfigPage, ResetMenuHdl ) );
78 
79  // These operations are not possible on menus/context menus yet
80  m_xModifyBtn->remove_item("changeIcon");
81  m_xModifyBtn->remove_item("resetIcon");
82  m_xModifyBtn->remove_item("restoreItem");
83 
84  if ( !bIsMenuBar )
85  {
86  //TODO: Remove this when the gear button is implemented for context menus
87  m_xGearBtn->set_sensitive(false);
88  m_xGearBtn->hide();
89  }
90  else
91  {
92  // TODO: Remove this when it is possible to reset menubar menus individually
93  m_xResetBtn->set_sensitive(false);
94  }
95 }
96 
98 {
99  // regenerate with the current ordering within the list
100  SvxEntries* pEntries = GetTopLevelSelection()->GetEntries();
101  pEntries->clear();
102 
103  for (int i = 0; i < m_xContentsListBox->n_children(); ++i)
104  pEntries->push_back(reinterpret_cast<SvxConfigEntry*>(m_xContentsListBox->get_id(i).toInt64()));
105 
106  GetSaveInData()->SetModified();
107  GetTopLevelSelection()->SetModified();
108  UpdateButtonStates();
109 }
110 
111 IMPL_LINK(SvxMenuConfigPage, MenuEntriesSizeAllocHdl, const Size&, rSize, void)
112 {
113  weld::TreeView& rTreeView = m_xContentsListBox->get_widget();
114  std::vector<int> aWidths;
115 
116  int nExpectedSize = 16;
117 
118  int nStandardImageColWidth = rTreeView.get_checkbox_column_width();
119  int nMargin = nStandardImageColWidth - nExpectedSize;
120  if (nMargin < 16)
121  nMargin = 16;
122 
123  if (SvxConfigPageHelper::GetImageType() & css::ui::ImageType::SIZE_LARGE)
124  nExpectedSize = 24;
125  else if (SvxConfigPageHelper::GetImageType() & css::ui::ImageType::SIZE_32)
126  nExpectedSize = 32;
127 
128  int nImageColWidth = nExpectedSize + nMargin;
129 
130  aWidths.push_back(nImageColWidth);
131  aWidths.push_back(rSize.Width() - (nImageColWidth + nStandardImageColWidth));
132  rTreeView.set_column_fixed_widths(aWidths);
133 }
134 
136 {
137  disposeOnce();
138 }
139 
140 // Populates the Menu combo box
142 {
143  // ensure that the UI is cleared before populating it
144  m_xTopLevelListBox->clear();
145  m_xContentsListBox->clear();
146 
148 
149  m_xTopLevelListBox->set_active(0);
150  SelectElement();
151 
154  m_xFrame,
156  m_xCommandCategoryListBox->categorySelected(m_xFunctions.get(), OUString(), GetSaveInData());
157 }
158 
160 {
161  for (int i = 0, nCount = m_xSaveInListBox->get_count(); i < nCount; ++i)
162  delete reinterpret_cast<SaveInData*>(m_xSaveInListBox->get_id(i).toInt64());
163  m_xSaveInListBox->clear();
164 
166 }
167 
169 {
170  UpdateButtonStates();
171 }
172 
174 {
175  // Disable Up and Down buttons depending on current selection
176  int selection = m_xContentsListBox->get_selected_index();
177 
178  bool bIsSeparator =
179  selection != -1 && reinterpret_cast<SvxConfigEntry*>(m_xContentsListBox->get_id(selection).toInt64())->IsSeparator();
180  bool bIsValidSelection =
181  !(m_xContentsListBox->n_children() == 0 || selection == -1);
182 
183  m_xMoveUpButton->set_sensitive(
184  bIsValidSelection && selection != 0 );
185  m_xMoveDownButton->set_sensitive(
186  bIsValidSelection && selection != m_xContentsListBox->n_children() - 1);
187 
188  m_xRemoveCommandButton->set_sensitive( bIsValidSelection );
189 
190  m_xModifyBtn->set_sensitive( bIsValidSelection && !bIsSeparator);
191 
192  // If there is no top level selection (menu), then everything working on the right box
193  // which contains the functions of the selected menu/toolbar needs to be disabled
194  SvxConfigEntry* pMenuData = GetTopLevelSelection();
195 
196  m_xInsertBtn->set_sensitive(pMenuData != nullptr);
197 
198  m_xAddCommandButton->set_sensitive(pMenuData != nullptr);
199  m_xRemoveCommandButton->set_sensitive(pMenuData != nullptr);
200 
201  //Handle the gear button
202  if (pMenuData && m_bIsMenuBar)
203  {
204  // Add option (gear_add) will always be enabled
205  m_xGearBtn->set_item_sensitive( "menu_gear_delete", pMenuData->IsDeletable() );
206  m_xGearBtn->set_item_sensitive( "menu_gear_rename", pMenuData->IsRenamable() );
207  m_xGearBtn->set_item_sensitive( "menu_gear_move", pMenuData->IsMovable() );
208  }
209 }
210 
212 {
213  SvxConfigEntry* pMenuData = GetTopLevelSelection();
214 
215  SvxEntries* pParentEntries =
216  FindParentForChild( GetSaveInData()->GetEntries(), pMenuData );
217 
218  SvxConfigPageHelper::RemoveEntry( pParentEntries, pMenuData );
219  delete pMenuData;
220 
222 
224 }
225 
227 {
228  int nActEntry = m_xContentsListBox->get_selected_index();
229 
230  if (nActEntry != -1)
231  {
232  // get currently selected menu entry
233  SvxConfigEntry* pMenuEntry =
234  reinterpret_cast<SvxConfigEntry*>(m_xContentsListBox->get_id(nActEntry).toInt64());
235 
236  // get currently selected menu
238 
239  // remove menu entry from the list for this menu
240  SvxConfigPageHelper::RemoveEntry( pMenu->GetEntries(), pMenuEntry );
241 
242  // remove menu entry from UI
243  m_xContentsListBox->remove(nActEntry);
244 
245  // if this is a submenu entry, redraw the menus list box
246  if ( pMenuEntry->IsPopup() )
247  {
249  }
250 
251  // delete data for menu entry
252  delete pMenuEntry;
253 
255  pMenu->SetModified();
256  }
257 }
258 
260 {
261  OUString msg = CuiResId( RID_SVXSTR_CONFIRM_MENU_RESET );
262 
263  OUString saveInName = m_xSaveInListBox->get_active_text();
264 
265  OUString label = SvxConfigPageHelper::replaceSaveInName( msg, saveInName );
266 
267  std::unique_ptr<weld::MessageDialog> xQueryBox(Application::CreateMessageDialog(GetDialogFrameWeld(),
268  VclMessageType::Question, VclButtonsType::YesNo,
269  label));
270  return xQueryBox->run();
271 }
272 
274 {
275  m_xContentsListBox->clear();
276 
277  SvxConfigEntry* pMenuData = GetTopLevelSelection();
278 
279  if ( pMenuData )
280  {
281  SvxEntries* pEntries = pMenuData->GetEntries();
282 
283  int i = 0;
284  for (auto const& entry : *pEntries)
285  {
286  OUString sId(OUString::number(reinterpret_cast<sal_Int64>(entry)));
287  m_xContentsListBox->insert(i, sId);
288  InsertEntryIntoUI(entry, i, 0);
289  ++i;
290  }
291  }
292 
294 }
295 
296 IMPL_LINK(SvxMenuConfigPage, GearHdl, const OString&, rIdent, void)
297 {
298  if (rIdent == "menu_gear_add")
299  {
300  SvxMainMenuOrganizerDialog aDialog(GetDialogFrameWeld(),
301  GetSaveInData()->GetEntries(), nullptr, true );
302 
303  if (aDialog.run() == RET_OK)
304  {
305  GetSaveInData()->SetEntries(aDialog.ReleaseEntries());
306  ReloadTopLevelListBox(aDialog.GetSelectedEntry());
307  GetSaveInData()->SetModified();
308  }
309  }
310  else if (rIdent == "menu_gear_delete")
311  {
312  DeleteSelectedTopLevel();
313  }
314  else if (rIdent == "menu_gear_rename")
315  {
316  SvxConfigEntry* pMenuData = GetTopLevelSelection();
317 
318  OUString sCurrentName( SvxConfigPageHelper::stripHotKey( pMenuData->GetName() ) );
319  OUString sDesc = CuiResId( RID_SVXSTR_LABEL_NEW_NAME );
320 
321  SvxNameDialog aNameDialog(GetDialogFrameWeld(), sCurrentName, sDesc);
323  aNameDialog.set_title(CuiResId(RID_SVXSTR_RENAME_MENU));
324 
325  if ( aNameDialog.run() == RET_OK )
326  {
327  OUString sNewName = aNameDialog.GetName();
328 
329  if ( sCurrentName == sNewName )
330  return;
331 
332  pMenuData->SetName( sNewName );
333 
334  ReloadTopLevelListBox();
335 
336  GetSaveInData()->SetModified();
337  }
338  }
339  else if (rIdent == "menu_gear_move")
340  {
341  SvxConfigEntry* pMenuData = GetTopLevelSelection();
342 
343  SvxMainMenuOrganizerDialog aDialog(GetDialogFrameWeld(), GetSaveInData()->GetEntries(),
344  pMenuData, false );
345  if (aDialog.run() == RET_OK)
346  {
347  GetSaveInData()->SetEntries(aDialog.ReleaseEntries());
348 
349  ReloadTopLevelListBox();
350 
351  GetSaveInData()->SetModified();
352  }
353  }
354  else
355  {
356  //This block should never be reached
357  SAL_WARN("cui.customize", "Unknown gear menu option: " << rIdent);
358  return;
359  }
360 
361  UpdateButtonStates();
362 }
363 
365 {
366  OUString aSearchTerm( m_xSearchEdit->get_text() );
367 
368  m_xCommandCategoryListBox->categorySelected(m_xFunctions.get(), aSearchTerm, GetSaveInData());
369 }
370 
372 {
373  int nPos = AddFunction(-1, /*bAllowDuplicates*/false);
374  if (nPos == -1)
375  return;
376  SvxConfigEntry* pEntry =
377  reinterpret_cast<SvxConfigEntry*>(m_xContentsListBox->get_id(nPos).toInt64());
378  InsertEntryIntoUI(pEntry, nPos, 0);
379 }
380 
381 IMPL_LINK_NOARG( SvxMenuConfigPage, RemoveCommandHdl, weld::Button&, void )
382 {
383  DeleteSelectedContent();
384  if ( GetSaveInData()->IsModified() )
385  {
386  UpdateButtonStates();
387  }
388 }
389 
390 IMPL_LINK(SvxMenuConfigPage, InsertHdl, const OString&, rIdent, void)
391 {
392  if (rIdent == "insertseparator")
393  {
394  SvxConfigEntry* pNewEntryData = new SvxConfigEntry;
395  pNewEntryData->SetUserDefined();
396  int nPos = InsertEntry(pNewEntryData, -1);
397  InsertEntryIntoUI(pNewEntryData, nPos, 0);
398  }
399  else if (rIdent == "insertsubmenu")
400  {
401  OUString aNewName;
402  OUString aDesc = CuiResId( RID_SVXSTR_SUBMENU_NAME );
403 
404  SvxNameDialog aNameDialog(GetDialogFrameWeld(), aNewName, aDesc);
406  aNameDialog.set_title(CuiResId( RID_SVXSTR_ADD_SUBMENU));
407 
408  if (aNameDialog.run() == RET_OK)
409  {
410  aNewName = aNameDialog.GetName();
411 
412  SvxConfigEntry* pNewEntryData =
413  new SvxConfigEntry( aNewName, aNewName, true, /*bParentData*/false );
414  pNewEntryData->SetName( aNewName );
415  pNewEntryData->SetUserDefined();
416 
417  int nPos = InsertEntry(pNewEntryData, -1);
418  InsertEntryIntoUI(pNewEntryData, nPos, 0);
419 
420  ReloadTopLevelListBox();
421 
422  m_xContentsListBox->scroll_to_row(nPos);
423  m_xContentsListBox->select(nPos);
424 
425  GetSaveInData()->SetModified();
426  }
427 
428  }
429  else
430  {
431  //This block should never be reached
432  SAL_WARN("cui.customize", "Unknown insert option: " << rIdent);
433  return;
434  }
435 
436  if ( GetSaveInData()->IsModified() )
437  {
438  UpdateButtonStates();
439  }
440 }
441 
442 IMPL_LINK(SvxMenuConfigPage, ModifyItemHdl, const OString&, rIdent, void)
443 {
444  if (rIdent == "renameItem")
445  {
446  int nActEntry = m_xContentsListBox->get_selected_index();
447  SvxConfigEntry* pEntry =
448  reinterpret_cast<SvxConfigEntry*>(m_xContentsListBox->get_id(nActEntry).toInt64());
449 
450  OUString aNewName( SvxConfigPageHelper::stripHotKey( pEntry->GetName() ) );
451  OUString aDesc = CuiResId( RID_SVXSTR_LABEL_NEW_NAME );
452 
453  SvxNameDialog aNameDialog(GetDialogFrameWeld(), aNewName, aDesc);
455  aNameDialog.set_title(CuiResId(RID_SVXSTR_RENAME_MENU));
456 
457  if (aNameDialog.run() == RET_OK)
458  {
459  aNewName = aNameDialog.GetName();
460 
461  pEntry->SetName( aNewName );
462  m_xContentsListBox->set_text(nActEntry, aNewName, 1);
463 
464  GetSaveInData()->SetModified();
465  GetTopLevelSelection()->SetModified();
466  }
467  }
468  else
469  {
470  //This block should never be reached
471  SAL_WARN("cui.customize", "Unknown insert option: " << rIdent);
472  return;
473  }
474 
475  if ( GetSaveInData()->IsModified() )
476  {
477  UpdateButtonStates();
478  }
479 }
480 
482 {
483  SvxConfigEntry* pMenuData = GetTopLevelSelection();
484 
485  if (pMenuData == nullptr)
486  {
487  SAL_WARN("cui.customize", "RHB top level selection is null. A menu must be selected to reset!");
488  return;
489  }
490 
491  std::unique_ptr<weld::MessageDialog> xQueryBox(Application::CreateMessageDialog(GetDialogFrameWeld(),
492  VclMessageType::Question, VclButtonsType::YesNo,
493  CuiResId(RID_SVXSTR_CONFIRM_RESTORE_DEFAULT_MENU)));
494 
495  // Resetting individual top-level menus is not possible at the moment.
496  // So we are resetting only if it is a context menu
497  if (!m_bIsMenuBar && xQueryBox->run() == RET_YES)
498  {
499  sal_Int32 nPos = m_xTopLevelListBox->get_active();
500  ContextMenuSaveInData* pSaveInData = static_cast< ContextMenuSaveInData* >(GetSaveInData());
501 
502  pSaveInData->ResetContextMenu(pMenuData);
503 
504  // ensure that the UI is cleared before populating it
505  m_xTopLevelListBox->clear();
506  m_xContentsListBox->clear();
507 
508  ReloadTopLevelListBox();
509 
510  // Reselect the reset menu
511  m_xTopLevelListBox->set_active(nPos);
512  SelectElement();
513  }
514 }
515 
517  const css::uno::Reference< css::ui::XUIConfigurationManager >& xCfgMgr,
518  const css::uno::Reference< css::ui::XUIConfigurationManager >& xParentCfgMgr,
519  const OUString& aModuleId,
520  bool bDocConfig )
521 {
522  if ( !m_bIsMenuBar )
523  return static_cast< SaveInData* >( new ContextMenuSaveInData( xCfgMgr, xParentCfgMgr, aModuleId, bDocConfig ) );
524 
525  return static_cast< SaveInData* >( new MenuSaveInData( xCfgMgr, xParentCfgMgr, aModuleId, bDocConfig ) );
526 }
527 
528  /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
std::unique_ptr< CuiConfigFunctionListBox > m_xFunctions
Definition: cfg.hxx:373
SvxEntries * GetEntries() const
Definition: cfg.hxx:287
std::unique_ptr< weld::Button > m_xResetBtn
Definition: cfg.hxx:400
void set_title(const OUString &rTitle)
const OUString & GetName() const
Definition: cfg.hxx:275
std::unique_ptr< weld::MenuButton > m_xModifyBtn
Definition: cfg.hxx:398
std::unique_ptr< CommandCategoryListBox > m_xCommandCategoryListBox
Definition: cfg.hxx:372
std::unique_ptr< SvxEntries > ReleaseEntries()
Definition: cfg.hxx:512
SvxMenuConfigPage(TabPageParent pParent, const SfxItemSet &rItemSet, bool bIsMenuBar=true)
static OUString stripHotKey(const OUString &str)
void SetModified(bool bValue=true)
Definition: cfg.hxx:296
IMPL_LINK(SvxMenuConfigPage, MenuEntriesSizeAllocHdl, const Size &, rSize, void)
css::uno::Reference< css::frame::XFrame > m_xFrame
Definition: cfg.hxx:368
SaveInData * CreateSaveInData(const css::uno::Reference< css::ui::XUIConfigurationManager > &, const css::uno::Reference< css::ui::XUIConfigurationManager > &, const OUString &aModuleId, bool docConfig) override
SvxConfigEntry * GetTopLevelSelection()
Definition: cfg.hxx:467
static sal_Int16 GetImageType()
std::unique_ptr< weld::Button > m_xRemoveCommandButton
Definition: cfg.hxx:404
bool IsPopup() const
Definition: cfg.hxx:279
#define HID_SVX_CONFIG_RENAME_MENU_ITEM
Definition: helpids.h:34
OUString const GetModuleIdentifier(const Reference< frame::XFrame > &rxFrame)
void connect_model_changed(const Link< TreeView &, void > &rLink)
void InsertEntryIntoUI(SvxConfigEntry *pNewEntryData, int nPos, int nStartCol)
Definition: cfg.cxx:1525
OUString GetName() const
Definition: dlgname.hxx:39
std::unique_ptr< SvxMenuEntriesListBox > m_xContentsListBox
Definition: cfg.hxx:390
void ReloadTopLevelListBox(SvxConfigEntry const *pSelection=nullptr)
Definition: cfg.cxx:1333
Dialog for editing a name.
Definition: dlgname.hxx:25
std::vector< SvxConfigEntry * > SvxEntries
Definition: cfg.hxx:59
std::unique_ptr< weld::ComboBox > m_xTopLevelListBox
Definition: cfg.hxx:387
void connect_changed(const Link< TreeView &, void > &rLink)
RET_YES
virtual void show()=0
static void RemoveEntry(SvxEntries *pEntries, SvxConfigEntry const *pChildEntry)
virtual void set_column_fixed_widths(const std::vector< int > &rWidths)=0
void SetName(const OUString &rStr)
Definition: cfg.hxx:276
virtual void set_vexpand(bool bExpand)=0
virtual void dispose() override
void Init() override
static OUString replaceSaveInName(const OUString &rMessage, const OUString &rSaveInName)
bool IsDeletable()
Definition: cfg.cxx:1881
void DeleteSelectedTopLevel() override
SvxEntries * FindParentForChild(SvxEntries *pParentEntries, SvxConfigEntry *pChildData)
Definition: cfg.cxx:1384
weld::Window * GetDialogFrameWeld() const
std::unique_ptr< weld::Builder > m_xBuilder
#define HID_SVX_CONFIG_NAME_SUBMENU
Definition: helpids.h:32
void SetUserDefined(bool bOn=true)
Definition: cfg.hxx:281
int i
bool IsMovable()
Definition: cfg.cxx:1876
virtual void set_hexpand(bool bExpand)=0
void set_help_id(const OString &rHelpId)
void ResetContextMenu(const SvxConfigEntry *pEntry)
Definition: cfg.cxx:895
short QueryReset() override
IMPL_LINK_NOARG(SvxMenuConfigPage, ListModifiedHdl, weld::TreeView &, void)
OUString CuiResId(const char *pKey)
Definition: cuiresmgr.cxx:23
std::unique_ptr< weld::MenuButton > m_xInsertBtn
Definition: cfg.hxx:397
bool IsRenamable()
Definition: cfg.cxx:1886
int get_checkbox_column_width() const
virtual void SelectElement() override
virtual void connect_size_allocate(const Link< const Size &, void > &rLink)
void SetModified(bool bValue=true)
Definition: cfg.hxx:123
void UpdateButtonStates() override
RET_OK
virtual short run()
Reference< XComponentContext > getProcessComponentContext()
virtual void dispose() override
#define HID_SVX_CONFIG_RENAME_MENU
Definition: helpids.h:33
static weld::MessageDialog * CreateMessageDialog(weld::Widget *pParent, VclMessageType eMessageType, VclButtonsType eButtonType, const OUString &rPrimaryMessage)
std::unique_ptr< weld::ComboBox > m_xSaveInListBox
Definition: cfg.hxx:395
SvxConfigEntry * GetSelectedEntry()
Definition: cfg.cxx:1837
std::unique_ptr< weld::Button > m_xMoveDownButton
Definition: cfg.hxx:393
#define SAL_WARN(area, stream)
std::unique_ptr< weld::Button > m_xMoveUpButton
Definition: cfg.hxx:392
def label(st)
std::unique_ptr< weld::MenuButton > m_xGearBtn
Definition: cfg.hxx:389
virtual void set_size_request(int nWidth, int nHeight)=0
sal_Int32 nPos
virtual ~SvxMenuConfigPage() override
SaveInData * GetSaveInData()
Definition: cfg.hxx:452
void DeleteSelectedContent() override
std::unique_ptr< weld::Button > m_xAddCommandButton
Definition: cfg.hxx:403
OUString sId