[Libreoffice-commits] core.git: cui/source cui/uiconfig
Caolán McNamara
caolanm at redhat.com
Thu May 17 07:54:14 UTC 2018
cui/source/customize/SvxMenuConfigPage.cxx | 19 +--
cui/source/customize/cfg.cxx | 153 ++++++++++-------------------
cui/source/inc/cfg.hxx | 29 ++---
cui/uiconfig/ui/movemenu.ui | 105 ++++++++-----------
4 files changed, 123 insertions(+), 183 deletions(-)
New commits:
commit 52ccd8fabeea247da7077798b50a6db1da31a2eb
Author: Caolán McNamara <caolanm at redhat.com>
Date: Wed May 16 14:37:20 2018 +0100
weld SvxMainMenuOrganizerDialog
Change-Id: I157dc8054e3bd0055cc52f7c9a80066026b7033d
Reviewed-on: https://gerrit.libreoffice.org/54424
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
Tested-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/cui/source/customize/SvxMenuConfigPage.cxx b/cui/source/customize/SvxMenuConfigPage.cxx
index 9f4e2328b337..dd9fb7e71fe0 100644
--- a/cui/source/customize/SvxMenuConfigPage.cxx
+++ b/cui/source/customize/SvxMenuConfigPage.cxx
@@ -320,13 +320,13 @@ IMPL_LINK( SvxMenuConfigPage, GearHdl, MenuButton *, pButton, void )
if (sIdent == "gear_add")
{
- VclPtrInstance<SvxMainMenuOrganizerDialog> pDialog(
- nullptr, GetSaveInData()->GetEntries(), nullptr, true );
+ SvxMainMenuOrganizerDialog aDialog(GetFrameWeld(),
+ GetSaveInData()->GetEntries(), nullptr, true );
- if ( pDialog->Execute() == RET_OK )
+ if (aDialog.run() == RET_OK)
{
- GetSaveInData()->SetEntries( pDialog->ReleaseEntries() );
- ReloadTopLevelListBox( pDialog->GetSelectedEntry() );
+ GetSaveInData()->SetEntries(aDialog.ReleaseEntries());
+ ReloadTopLevelListBox(aDialog.GetSelectedEntry());
GetSaveInData()->SetModified();
}
}
@@ -363,12 +363,11 @@ IMPL_LINK( SvxMenuConfigPage, GearHdl, MenuButton *, pButton, void )
{
SvxConfigEntry* pMenuData = GetTopLevelSelection();
- VclPtrInstance<SvxMainMenuOrganizerDialog> pDialog(
- this, GetSaveInData()->GetEntries(), pMenuData, false );
-
- if ( pDialog->Execute() == RET_OK )
+ SvxMainMenuOrganizerDialog aDialog(GetFrameWeld(), GetSaveInData()->GetEntries(),
+ pMenuData, false );
+ if (aDialog.run() == RET_OK)
{
- GetSaveInData()->SetEntries( pDialog->ReleaseEntries() );
+ GetSaveInData()->SetEntries(aDialog.ReleaseEntries());
ReloadTopLevelListBox();
diff --git a/cui/source/customize/cfg.cxx b/cui/source/customize/cfg.cxx
index 6070a7be05ee..be9d4060d172 100644
--- a/cui/source/customize/cfg.cxx
+++ b/cui/source/customize/cfg.cxx
@@ -1884,18 +1884,18 @@ bool SvxConfigPage::MoveEntryData(
}
SvxMainMenuOrganizerDialog::SvxMainMenuOrganizerDialog(
- vcl::Window* pParent, SvxEntries* entries,
+ weld::Window* pParent, SvxEntries* entries,
SvxConfigEntry const * selection, bool bCreateMenu )
- : ModalDialog(pParent, "MoveMenuDialog", "cui/ui/movemenu.ui")
+ : GenericDialogController(pParent, "cui/ui/movemenu.ui", "MoveMenuDialog")
, mpEntries(nullptr)
, bModified(false)
+ , m_xMenuBox(m_xBuilder->weld_widget("namebox"))
+ , m_xMenuNameEdit(m_xBuilder->weld_entry("menuname"))
+ , m_xMenuListBox(m_xBuilder->weld_tree_view("menulist"))
+ , m_xMoveUpButton(m_xBuilder->weld_button("up"))
+ , m_xMoveDownButton(m_xBuilder->weld_button("down"))
{
- get(m_pMenuBox, "namebox");
- get(m_pMenuNameEdit, "menuname");
- get(m_pMoveUpButton, "up");
- get(m_pMoveDownButton, "down");
- get(m_pMenuListBox, "menulist");
- m_pMenuListBox->set_height_request(m_pMenuListBox->GetTextHeight() * 12);
+ m_xMenuListBox->set_size_request(-1, m_xMenuListBox->get_height_rows(12));
// Copy the entries list passed in
if ( entries != nullptr )
@@ -1903,14 +1903,12 @@ SvxMainMenuOrganizerDialog::SvxMainMenuOrganizerDialog(
mpEntries.reset( new SvxEntries );
for (auto const& entry : *entries)
{
- SvTreeListEntry* pLBEntry =
- m_pMenuListBox->InsertEntry( SvxConfigPageHelper::stripHotKey( entry->GetName() ) );
- pLBEntry->SetUserData(entry);
+ m_xMenuListBox->append(OUString::number(reinterpret_cast<sal_uInt64>(entry)),
+ SvxConfigPageHelper::stripHotKey(entry->GetName()), "");
mpEntries->push_back(entry);
-
if (entry == selection)
{
- m_pMenuListBox->Select( pLBEntry );
+ m_xMenuListBox->select(m_xMenuListBox->n_children() - 1);
}
}
}
@@ -1929,70 +1927,54 @@ SvxMainMenuOrganizerDialog::SvxMainMenuOrganizerDialog(
pNewEntryData->SetUserDefined();
pNewEntryData->SetMain();
- pNewMenuEntry =
- m_pMenuListBox->InsertEntry( SvxConfigPageHelper::stripHotKey( pNewEntryData->GetName() ) );
- m_pMenuListBox->Select( pNewMenuEntry );
-
- pNewMenuEntry->SetUserData( pNewEntryData );
+ m_sNewMenuEntryId = OUString::number(reinterpret_cast<sal_uInt64>(pNewEntryData));
+ m_xMenuListBox->append(m_sNewMenuEntryId,
+ SvxConfigPageHelper::stripHotKey(pNewEntryData->GetName()), "");
+ m_xMenuListBox->select(m_xMenuListBox->n_children() - 1);
if (mpEntries)
mpEntries->push_back(pNewEntryData);
- m_pMenuNameEdit->SetText( newname );
- m_pMenuNameEdit->SetModifyHdl(
- LINK( this, SvxMainMenuOrganizerDialog, ModifyHdl ) );
+ m_xMenuNameEdit->set_text(newname);
+ m_xMenuNameEdit->connect_changed(LINK(this, SvxMainMenuOrganizerDialog, ModifyHdl));
}
else
{
- pNewMenuEntry = nullptr;
-
// hide name label and textfield
- m_pMenuBox->Hide();
+ m_xMenuBox->hide();
// change the title
- SetText( CuiResId( RID_SVXSTR_MOVE_MENU ) );
+ m_xDialog->set_title(CuiResId(RID_SVXSTR_MOVE_MENU));
}
- m_pMenuListBox->SetSelectHdl(
- LINK( this, SvxMainMenuOrganizerDialog, SelectHdl ) );
+ m_xMenuListBox->connect_changed(LINK(this, SvxMainMenuOrganizerDialog, SelectHdl));
- m_pMoveUpButton->SetClickHdl (
- LINK( this, SvxMainMenuOrganizerDialog, MoveHdl) );
- m_pMoveDownButton->SetClickHdl (
- LINK( this, SvxMainMenuOrganizerDialog, MoveHdl) );
+ m_xMoveUpButton->connect_clicked(LINK( this, SvxMainMenuOrganizerDialog, MoveHdl));
+ m_xMoveDownButton->connect_clicked(LINK( this, SvxMainMenuOrganizerDialog, MoveHdl));
}
SvxMainMenuOrganizerDialog::~SvxMainMenuOrganizerDialog()
{
- disposeOnce();
}
-void SvxMainMenuOrganizerDialog::dispose()
-{
- m_pMenuBox.clear();
- m_pMenuNameEdit.clear();
- m_pMenuListBox.clear();
- m_pMoveUpButton.clear();
- m_pMoveDownButton.clear();
- ModalDialog::dispose();
-}
-
-IMPL_LINK_NOARG(SvxMainMenuOrganizerDialog, ModifyHdl, Edit&, void)
+IMPL_LINK_NOARG(SvxMainMenuOrganizerDialog, ModifyHdl, weld::Entry&, void)
{
// if the Edit control is empty do not change the name
- if (m_pMenuNameEdit->GetText().isEmpty())
+ if (m_xMenuNameEdit->get_text().isEmpty())
{
return;
}
- SvxConfigEntry* pNewEntryData =
- static_cast<SvxConfigEntry*>(pNewMenuEntry->GetUserData());
+ SvxConfigEntry* pNewEntryData = reinterpret_cast<SvxConfigEntry*>(m_sNewMenuEntryId.toUInt64());
+ pNewEntryData->SetName(m_xMenuNameEdit->get_text());
- pNewEntryData->SetName(m_pMenuNameEdit->GetText());
-
- m_pMenuListBox->SetEntryText( pNewMenuEntry, pNewEntryData->GetName() );
+ const int nNewMenuPos = m_xMenuListBox->find_id(m_sNewMenuEntryId);
+ const int nOldSelection = m_xMenuListBox->get_selected_index();
+ m_xMenuListBox->remove(nNewMenuPos);
+ m_xMenuListBox->insert(nNewMenuPos, m_sNewMenuEntryId, pNewEntryData->GetName(), "");
+ m_xMenuListBox->select(nOldSelection);
}
-IMPL_LINK_NOARG( SvxMainMenuOrganizerDialog, SelectHdl, SvTreeListBox*, void )
+IMPL_LINK_NOARG(SvxMainMenuOrganizerDialog, SelectHdl, weld::TreeView&, void)
{
UpdateButtonStates();
}
@@ -2000,71 +1982,46 @@ IMPL_LINK_NOARG( SvxMainMenuOrganizerDialog, SelectHdl, SvTreeListBox*, void )
void SvxMainMenuOrganizerDialog::UpdateButtonStates()
{
// Disable Up and Down buttons depending on current selection
- SvTreeListEntry* selection = m_pMenuListBox->GetCurEntry();
- SvTreeListEntry* first = m_pMenuListBox->First();
- SvTreeListEntry* last = m_pMenuListBox->Last();
-
- m_pMoveUpButton->Enable( selection != first );
- m_pMoveDownButton->Enable( selection != last );
+ const int nSelected = m_xMenuListBox->get_selected_index();
+ m_xMoveUpButton->set_sensitive(nSelected > 0);
+ m_xMoveDownButton->set_sensitive(nSelected != -1 && nSelected < m_xMenuListBox->n_children() - 1);
}
-IMPL_LINK( SvxMainMenuOrganizerDialog, MoveHdl, Button *, pButton, void )
+IMPL_LINK( SvxMainMenuOrganizerDialog, MoveHdl, weld::Button&, rButton, void )
{
- SvTreeListEntry *pSourceEntry = m_pMenuListBox->FirstSelected();
- SvTreeListEntry *pTargetEntry = nullptr;
-
- if ( !pSourceEntry )
- {
+ int nSourceEntry = m_xMenuListBox->get_selected_index();
+ if (nSourceEntry == -1)
return;
- }
- if (pButton == m_pMoveDownButton)
+ int nTargetEntry;
+
+ if (&rButton == m_xMoveDownButton.get())
{
- pTargetEntry = SvTreeListBox::NextSibling( pSourceEntry );
+ nTargetEntry = nSourceEntry + 1;
}
- else if (pButton == m_pMoveUpButton)
+ else
{
// Move Up is just a Move Down with the source and target reversed
- pTargetEntry = pSourceEntry;
- pSourceEntry = SvTreeListBox::PrevSibling( pTargetEntry );
+ nTargetEntry = nSourceEntry - 1;
}
- if ( pSourceEntry != nullptr && pTargetEntry != nullptr )
- {
- SvxConfigEntry* pSourceData =
- static_cast<SvxConfigEntry*>(pSourceEntry->GetUserData());
- SvxConfigEntry* pTargetData =
- static_cast<SvxConfigEntry*>(pTargetEntry->GetUserData());
-
- SvxEntries::iterator iter1 = mpEntries->begin();
- SvxEntries::iterator iter2 = mpEntries->begin();
- SvxEntries::const_iterator end = mpEntries->end();
+ OUString sId = m_xMenuListBox->get_id(nSourceEntry);
+ OUString sEntry = m_xMenuListBox->get_text(nSourceEntry);
+ m_xMenuListBox->remove(nSourceEntry);
+ m_xMenuListBox->insert(nTargetEntry, sId, sEntry, "");
+ m_xMenuListBox->select(nTargetEntry);
- // Advance the iterators to the positions of the source and target
- while (*iter1 != pSourceData && ++iter1 != end) ;
- while (*iter2 != pTargetData && ++iter2 != end) ;
-
- // Now swap the entries in the menu list and in the UI
- if ( iter1 != end && iter2 != end )
- {
- std::swap( *iter1, *iter2 );
- m_pMenuListBox->GetModel()->Move( pSourceEntry, pTargetEntry );
- m_pMenuListBox->MakeVisible( pSourceEntry );
+ bModified = true;
- bModified = true;
- }
- }
-
- if ( bModified )
- {
- UpdateButtonStates();
- }
+ UpdateButtonStates();
}
-
SvxConfigEntry* SvxMainMenuOrganizerDialog::GetSelectedEntry()
{
- return static_cast<SvxConfigEntry*>(m_pMenuListBox->FirstSelected()->GetUserData());
+ const int nSelected(m_xMenuListBox->get_selected_index());
+ if (nSelected == -1)
+ return nullptr;
+ return reinterpret_cast<SvxConfigEntry*>(m_xMenuListBox->get_id(nSelected).toUInt64());
}
SvxConfigEntry::SvxConfigEntry( const OUString& rDisplayName,
diff --git a/cui/source/inc/cfg.hxx b/cui/source/inc/cfg.hxx
index 63f6bf2fc123..6e6e1584685b 100644
--- a/cui/source/inc/cfg.hxx
+++ b/cui/source/inc/cfg.hxx
@@ -491,30 +491,29 @@ public:
OUString GetSelectedDisplayName();
};
-class SvxMainMenuOrganizerDialog : public ModalDialog
+class SvxMainMenuOrganizerDialog : public weld::GenericDialogController
{
- VclPtr<VclContainer> m_pMenuBox;
- VclPtr<Edit> m_pMenuNameEdit;
- VclPtr<SvTreeListBox> m_pMenuListBox;
- VclPtr<PushButton> m_pMoveUpButton;
- VclPtr<PushButton> m_pMoveDownButton;
-
std::unique_ptr<SvxEntries> mpEntries;
- SvTreeListEntry* pNewMenuEntry;
+ OUString m_sNewMenuEntryId;
bool bModified;
+ std::unique_ptr<weld::Widget> m_xMenuBox;
+ std::unique_ptr<weld::Entry> m_xMenuNameEdit;
+ std::unique_ptr<weld::TreeView> m_xMenuListBox;
+ std::unique_ptr<weld::Button> m_xMoveUpButton;
+ std::unique_ptr<weld::Button> m_xMoveDownButton;
+
void UpdateButtonStates();
- DECL_LINK( MoveHdl, Button *, void );
- DECL_LINK( ModifyHdl, Edit&, void );
- DECL_LINK( SelectHdl, SvTreeListBox*, void );
+ DECL_LINK(MoveHdl, weld::Button&, void);
+ DECL_LINK(ModifyHdl, weld::Entry&, void);
+ DECL_LINK(SelectHdl, weld::TreeView&, void);
public:
- SvxMainMenuOrganizerDialog (
- vcl::Window*, SvxEntries*,
- SvxConfigEntry const *, bool bCreateMenu );
+ SvxMainMenuOrganizerDialog(
+ weld::Window*, SvxEntries*,
+ SvxConfigEntry const *, bool bCreateMenu);
virtual ~SvxMainMenuOrganizerDialog() override;
- virtual void dispose() override;
std::unique_ptr<SvxEntries> ReleaseEntries() { return std::move(mpEntries);}
SvxConfigEntry* GetSelectedEntry();
diff --git a/cui/uiconfig/ui/movemenu.ui b/cui/uiconfig/ui/movemenu.ui
index 9ac57e7861fd..fdeb1ee117b3 100644
--- a/cui/uiconfig/ui/movemenu.ui
+++ b/cui/uiconfig/ui/movemenu.ui
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.16.1 -->
+<!-- Generated with glade 3.22.1 -->
<interface domain="cui">
<requires lib="gtk+" version="3.18"/>
- <!-- interface-requires LibreOffice 1.0 -->
<object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -13,11 +12,22 @@
<property name="can_focus">False</property>
<property name="stock">gtk-go-down</property>
</object>
+ <object class="GtkListStore" id="liststore1">
+ <columns>
+ <!-- column-name text -->
+ <column type="gchararray"/>
+ <!-- column-name id -->
+ <column type="gchararray"/>
+ </columns>
+ </object>
<object class="GtkDialog" id="MoveMenuDialog">
<property name="can_focus">False</property>
<property name="border_width">6</property>
<property name="title" translatable="yes" context="movemenu|MoveMenuDialog">New Menu</property>
<property name="type_hint">dialog</property>
+ <child>
+ <placeholder/>
+ </child>
<child internal-child="vbox">
<object class="GtkBox" id="dialog-vbox1">
<property name="can_focus">False</property>
@@ -99,10 +109,10 @@
<object class="GtkLabel" id="menunameft">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="xalign">0</property>
<property name="label" translatable="yes" context="movemenu|menunameft">Menu name:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">menuname</property>
+ <property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
@@ -111,61 +121,11 @@
</packing>
</child>
<child>
- <object class="GtkBox" id="box6">
+ <object class="GtkEntry" id="menuname">
<property name="visible">True</property>
- <property name="can_focus">False</property>
+ <property name="can_focus">True</property>
<property name="hexpand">True</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkEntry" id="menuname">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hexpand">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="box7">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="valign">center</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkImage" id="up1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="stock">gtk-go-up</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkImage" id="down1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="stock">gtk-go-down</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
+ <property name="activates_default">True</property>
</object>
<packing>
<property name="expand">False</property>
@@ -192,9 +152,9 @@
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="xalign">0</property>
<property name="label" translatable="yes" context="movemenu|label1">Menu _position:</property>
<property name="use_underline">True</property>
+ <property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
@@ -210,13 +170,36 @@
<property name="vexpand">True</property>
<property name="spacing">12</property>
<child>
- <object class="svtlo-SvTreeListBox" id="menulist:border">
+ <object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
- <child internal-child="selection">
- <object class="GtkTreeSelection" id="Tree List-selection1"/>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkTreeView" id="menulist">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="vexpand">True</property>
+ <property name="model">liststore1</property>
+ <property name="headers_visible">False</property>
+ <property name="headers_clickable">False</property>
+ <property name="search_column">0</property>
+ <property name="show_expanders">False</property>
+ <child internal-child="selection">
+ <object class="GtkTreeSelection" id="treeview-selection1"/>
+ </child>
+ <child>
+ <object class="GtkTreeViewColumn" id="treeviewcolumn1">
+ <child>
+ <object class="GtkCellRendererText" id="cellrenderertext1"/>
+ <attributes>
+ <attribute name="text">0</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ </object>
</child>
</object>
<packing>
@@ -238,6 +221,7 @@
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="image">image1</property>
+ <property name="always_show_image">True</property>
<child internal-child="accessible">
<object class="AtkObject" id="up-atkobject">
<property name="AtkObject::accessible-name" translatable="yes" context="movemenu|up-atkobject">Up</property>
@@ -256,6 +240,7 @@
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="image">image2</property>
+ <property name="always_show_image">True</property>
<child internal-child="accessible">
<object class="AtkObject" id="down-atkobject">
<property name="AtkObject::accessible-name" translatable="yes" context="movemenu|down-atkobject">Down</property>
More information about the Libreoffice-commits
mailing list