Kaydet (Commit) 25435b29 authored tarafından Muhammet Kara's avatar Muhammet Kara Kaydeden (comit) Katarina Behrens

Make toolbar/menu addition/removal functional again in the Customize dialog

"+" and "-" buttons next to the menu/toolbar listbox can be used
to add new toolbars/menus or remove existing toolbars/menus.

Most of the code was borrowed from the previous implementation,
and adapted to fit the current structure.

Change-Id: I7e7f51a46251c2d010154f2a0bab3bb20280bf7c
Reviewed-on: https://gerrit.libreoffice.org/41431Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarKatarina Behrens <Katarina.Behrens@cib.de>
üst 46d993c3
...@@ -119,6 +119,11 @@ SvxMenuConfigPage::SvxMenuConfigPage(vcl::Window *pParent, const SfxItemSet& rSe ...@@ -119,6 +119,11 @@ SvxMenuConfigPage::SvxMenuConfigPage(vcl::Window *pParent, const SfxItemSet& rSe
m_pContentsListBox->SetSelectHdl( m_pContentsListBox->SetSelectHdl(
LINK( this, SvxMenuConfigPage, SelectMenuEntry ) ); LINK( this, SvxMenuConfigPage, SelectMenuEntry ) );
m_pPlusBtn->SetClickHdl(
LINK( this, SvxMenuConfigPage, AddMenuHdl ) );
m_pMinusBtn->SetClickHdl(
LINK( this, SvxMenuConfigPage, RemoveMenuHdl ) );
m_pCommandCategoryListBox->SetSelectHdl( m_pCommandCategoryListBox->SetSelectHdl(
LINK( this, SvxMenuConfigPage, SelectCategory ) ); LINK( this, SvxMenuConfigPage, SelectCategory ) );
...@@ -133,6 +138,13 @@ SvxMenuConfigPage::SvxMenuConfigPage(vcl::Window *pParent, const SfxItemSet& rSe ...@@ -133,6 +138,13 @@ SvxMenuConfigPage::SvxMenuConfigPage(vcl::Window *pParent, const SfxItemSet& rSe
m_pResetBtn->SetClickHdl( m_pResetBtn->SetClickHdl(
LINK( this, SvxMenuConfigPage, ResetMenuHdl ) ); LINK( this, SvxMenuConfigPage, ResetMenuHdl ) );
if ( !bIsMenuBar )
{
// Context menus cannot be added/removed
m_pPlusBtn->Hide();
m_pMinusBtn->Hide();
}
} }
SvxMenuConfigPage::~SvxMenuConfigPage() SvxMenuConfigPage::~SvxMenuConfigPage()
...@@ -280,6 +292,9 @@ IMPL_LINK_NOARG( SvxMenuConfigPage, SelectMenu, ListBox&, void ) ...@@ -280,6 +292,9 @@ IMPL_LINK_NOARG( SvxMenuConfigPage, SelectMenu, ListBox&, void )
if ( pMenuData ) if ( pMenuData )
{ {
// Built-in menus cannot be deleted
m_pMinusBtn->Enable( pMenuData->IsDeletable() );
SvxEntries* pEntries = pMenuData->GetEntries(); SvxEntries* pEntries = pMenuData->GetEntries();
SvxEntries::const_iterator iter = pEntries->begin(); SvxEntries::const_iterator iter = pEntries->begin();
...@@ -293,6 +308,24 @@ IMPL_LINK_NOARG( SvxMenuConfigPage, SelectMenu, ListBox&, void ) ...@@ -293,6 +308,24 @@ IMPL_LINK_NOARG( SvxMenuConfigPage, SelectMenu, ListBox&, void )
UpdateButtonStates(); UpdateButtonStates();
} }
IMPL_LINK_NOARG( SvxMenuConfigPage, AddMenuHdl, Button *, void )
{
VclPtrInstance<SvxMainMenuOrganizerDialog> pDialog(
nullptr, GetSaveInData()->GetEntries(), nullptr, true );
if ( pDialog->Execute() == RET_OK )
{
GetSaveInData()->SetEntries( pDialog->GetEntries() );
ReloadTopLevelListBox( pDialog->GetSelectedEntry() );
GetSaveInData()->SetModified();
}
}
IMPL_LINK_NOARG( SvxMenuConfigPage, RemoveMenuHdl, Button *, void )
{
DeleteSelectedTopLevel();
}
IMPL_LINK_NOARG( SvxMenuConfigPage, SelectCategory, ListBox&, void ) IMPL_LINK_NOARG( SvxMenuConfigPage, SelectCategory, ListBox&, void )
{ {
OUString aSearchTerm( m_pSearchEdit->GetText() ); OUString aSearchTerm( m_pSearchEdit->GetText() );
......
...@@ -128,6 +128,11 @@ SvxToolbarConfigPage::SvxToolbarConfigPage(vcl::Window *pParent, const SfxItemSe ...@@ -128,6 +128,11 @@ SvxToolbarConfigPage::SvxToolbarConfigPage(vcl::Window *pParent, const SfxItemSe
m_pCommandCategoryListBox->SetSelectHdl( m_pCommandCategoryListBox->SetSelectHdl(
LINK( this, SvxToolbarConfigPage, SelectCategory ) ); LINK( this, SvxToolbarConfigPage, SelectCategory ) );
m_pPlusBtn->SetClickHdl(
LINK( this, SvxToolbarConfigPage, AddToolbarHdl ) );
m_pMinusBtn->SetClickHdl(
LINK( this, SvxToolbarConfigPage, RemoveToolbarHdl ) );
m_pMoveUpButton->SetClickHdl ( LINK( this, SvxToolbarConfigPage, MoveHdl) ); m_pMoveUpButton->SetClickHdl ( LINK( this, SvxToolbarConfigPage, MoveHdl) );
m_pMoveDownButton->SetClickHdl ( LINK( this, SvxToolbarConfigPage, MoveHdl) ); m_pMoveDownButton->SetClickHdl ( LINK( this, SvxToolbarConfigPage, MoveHdl) );
// Always enable Up and Down buttons // Always enable Up and Down buttons
...@@ -329,6 +334,79 @@ IMPL_LINK_NOARG( SvxToolbarConfigPage, SelectToolbarEntry, SvTreeListBox *, void ...@@ -329,6 +334,79 @@ IMPL_LINK_NOARG( SvxToolbarConfigPage, SelectToolbarEntry, SvTreeListBox *, void
UpdateButtonStates(); UpdateButtonStates();
} }
IMPL_LINK_NOARG( SvxToolbarConfigPage, AddToolbarHdl, Button *, void )
{
OUString prefix = CuiResId( RID_SVXSTR_NEW_TOOLBAR );
OUString aNewName =
SvxConfigPageHelper::generateCustomName( prefix, GetSaveInData()->GetEntries() );
OUString aNewURL =
SvxConfigPageHelper::generateCustomURL( GetSaveInData()->GetEntries() );
VclPtrInstance< SvxNewToolbarDialog > pNameDialog( nullptr, aNewName );
// Reflect the actual m_pSaveInListBox into the new toolbar dialog
for ( sal_Int32 i = 0; i < m_pSaveInListBox->GetEntryCount(); ++i )
{
SaveInData* pData =
static_cast<SaveInData*>(m_pSaveInListBox->GetEntryData( i ));
const sal_Int32 nInsertPos =
pNameDialog->m_pSaveInListBox->InsertEntry( m_pSaveInListBox->GetEntry( i ) );
pNameDialog->m_pSaveInListBox->SetEntryData( nInsertPos, pData );
}
pNameDialog->m_pSaveInListBox->SelectEntryPos(
m_pSaveInListBox->GetSelectEntryPos() );
if ( pNameDialog->Execute() == RET_OK )
{
aNewName = pNameDialog->GetName();
// Where to save the new toolbar? (i.e. Modulewise or documentwise)
sal_Int32 nInsertPos = pNameDialog->m_pSaveInListBox->GetSelectEntryPos();
ToolbarSaveInData* pData =
static_cast<ToolbarSaveInData*>(
pNameDialog->m_pSaveInListBox->GetEntryData( nInsertPos ) );
if ( GetSaveInData() != pData )
{
m_pSaveInListBox->SelectEntryPos( nInsertPos );
m_pSaveInListBox->GetSelectHdl().Call(*m_pSaveInListBox);
}
SvxConfigEntry* pToolbar =
new SvxConfigEntry( aNewName, aNewURL, true );
pToolbar->SetUserDefined();
pToolbar->SetMain();
pData->CreateToolbar( pToolbar );
nInsertPos = m_pTopLevelListBox->InsertEntry( pToolbar->GetName() );
m_pTopLevelListBox->SetEntryData( nInsertPos, pToolbar );
m_pTopLevelListBox->SelectEntryPos( nInsertPos );
m_pTopLevelListBox->GetSelectHdl().Call(*m_pTopLevelListBox);
pData->SetModified();
}
}
IMPL_LINK_NOARG( SvxToolbarConfigPage, RemoveToolbarHdl, Button *, void )
{
SvxConfigEntry* pToolbar = GetTopLevelSelection();
if ( pToolbar && pToolbar->IsDeletable() )
{
DeleteSelectedTopLevel();
UpdateButtonStates();
}
}
IMPL_LINK_NOARG( SvxToolbarConfigPage, SelectCategory, ListBox&, void ) IMPL_LINK_NOARG( SvxToolbarConfigPage, SelectCategory, ListBox&, void )
{ {
OUString aSearchTerm( m_pSearchEdit->GetText() ); OUString aSearchTerm( m_pSearchEdit->GetText() );
...@@ -436,8 +514,20 @@ IMPL_LINK_NOARG( SvxToolbarConfigPage, SelectToolbar, ListBox&, void ) ...@@ -436,8 +514,20 @@ IMPL_LINK_NOARG( SvxToolbarConfigPage, SelectToolbar, ListBox&, void )
if ( pToolbar == nullptr ) if ( pToolbar == nullptr )
{ {
//TODO: Disable related buttons //TODO: Disable related buttons
m_pPlusBtn->Enable( false );
m_pMinusBtn->Enable( false );
m_pInsertBtn->Enable( false );
m_pResetBtn->Enable( false );
return; return;
} }
else
{
m_pPlusBtn->Enable();
m_pMinusBtn->Enable( pToolbar->IsDeletable() );
m_pInsertBtn->Enable();
m_pResetBtn->Enable();
}
SvxEntries* pEntries = pToolbar->GetEntries(); SvxEntries* pEntries = pToolbar->GetEntries();
SvxEntries::const_iterator iter = pEntries->begin(); SvxEntries::const_iterator iter = pEntries->begin();
......
...@@ -1156,6 +1156,8 @@ SvxConfigPage::SvxConfigPage(vcl::Window *pParent, const SfxItemSet& rSet) ...@@ -1156,6 +1156,8 @@ SvxConfigPage::SvxConfigPage(vcl::Window *pParent, const SfxItemSet& rSet)
get(m_pRemoveCommandButton, "remove"); get(m_pRemoveCommandButton, "remove");
get(m_pTopLevelListBox, "toplevellist"); get(m_pTopLevelListBox, "toplevellist");
get(m_pPlusBtn, "plusbtn");
get(m_pMinusBtn, "minusbtn");
get(m_pContents, "contents"); get(m_pContents, "contents");
get(m_pMoveUpButton, "up"); get(m_pMoveUpButton, "up");
get(m_pMoveDownButton, "down"); get(m_pMoveDownButton, "down");
...@@ -1186,6 +1188,8 @@ SvxConfigPage::~SvxConfigPage() ...@@ -1186,6 +1188,8 @@ SvxConfigPage::~SvxConfigPage()
void SvxConfigPage::dispose() void SvxConfigPage::dispose()
{ {
m_pTopLevelListBox.clear(); m_pTopLevelListBox.clear();
m_pPlusBtn.clear();
m_pMinusBtn.clear();
m_pSearchEdit.clear(); m_pSearchEdit.clear();
m_pCommandCategoryListBox.clear(); m_pCommandCategoryListBox.clear();
m_pContents.clear(); m_pContents.clear();
......
...@@ -47,6 +47,11 @@ public: ...@@ -47,6 +47,11 @@ public:
SvxEntries* entries, SvxEntries* entries,
sal_Int32 suffix = 1 ); sal_Int32 suffix = 1 );
static sal_uInt32 generateRandomValue(); static sal_uInt32 generateRandomValue();
/**
Generates a custom resource URL for a new toolbar.
Typically something like: private:resource/toolbar/custom_toolbar_########
The last 8 letters are randomly generated alphanumeric characters.
*/
static OUString generateCustomURL( SvxEntries* entries ); static OUString generateCustomURL( SvxEntries* entries );
static OUString GetModuleName( const OUString& aModuleId ); static OUString GetModuleName( const OUString& aModuleId );
......
...@@ -54,6 +54,9 @@ private: ...@@ -54,6 +54,9 @@ private:
DECL_LINK( SelectMenu, ListBox&, void ); DECL_LINK( SelectMenu, ListBox&, void );
DECL_LINK( SelectMenuEntry, SvTreeListBox *, void ); DECL_LINK( SelectMenuEntry, SvTreeListBox *, void );
DECL_LINK( AddMenuHdl, Button *, void );
DECL_LINK( RemoveMenuHdl, Button *, void );
DECL_LINK( SelectCategory, ListBox&, void ); DECL_LINK( SelectCategory, ListBox&, void );
DECL_LINK( AddCommandHdl, Button *, void ); DECL_LINK( AddCommandHdl, Button *, void );
......
...@@ -55,6 +55,9 @@ private: ...@@ -55,6 +55,9 @@ private:
DECL_LINK( SelectToolbarEntry, SvTreeListBox*, void ); DECL_LINK( SelectToolbarEntry, SvTreeListBox*, void );
DECL_LINK( MoveHdl, Button *, void ); DECL_LINK( MoveHdl, Button *, void );
DECL_LINK( AddToolbarHdl, Button *, void );
DECL_LINK( RemoveToolbarHdl, Button *, void );
DECL_LINK( SelectCategory, ListBox&, void ); DECL_LINK( SelectCategory, ListBox&, void );
DECL_LINK( AddCommandHdl, Button *, void ); DECL_LINK( AddCommandHdl, Button *, void );
......
...@@ -396,6 +396,9 @@ protected: ...@@ -396,6 +396,9 @@ protected:
// Right side of the dialog where the contents of the selected // Right side of the dialog where the contents of the selected
// menu or toolbar are displayed // menu or toolbar are displayed
VclPtr<ListBox> m_pTopLevelListBox; VclPtr<ListBox> m_pTopLevelListBox;
// Used to add and remove toolbars/menus
VclPtr<PushButton> m_pPlusBtn;
VclPtr<PushButton> m_pMinusBtn;
VclPtr<VclFrame> m_pContents; VclPtr<VclFrame> m_pContents;
VclPtr<VclContainer> m_pEntries; VclPtr<VclContainer> m_pEntries;
VclPtr<SvTreeListBox> m_pContentsListBox; VclPtr<SvTreeListBox> m_pContentsListBox;
......
...@@ -262,7 +262,7 @@ ...@@ -262,7 +262,7 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkButton" id="add1"> <object class="GtkButton" id="plusbtn">
<property name="label" translatable="yes">+</property> <property name="label" translatable="yes">+</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
...@@ -276,7 +276,7 @@ ...@@ -276,7 +276,7 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkButton" id="remove1"> <object class="GtkButton" id="minusbtn">
<property name="label" translatable="yes">-</property> <property name="label" translatable="yes">-</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment