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