[Libreoffice-commits] core.git: sw/source sw/uiconfig

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Thu Oct 18 08:24:49 UTC 2018


 sw/source/ui/dbui/mailmergewizard.cxx      |    2 
 sw/source/ui/dbui/mmgreetingspage.cxx      |  445 +++++++++++------------------
 sw/source/ui/dbui/mmgreetingspage.hxx      |  120 ++++---
 sw/source/ui/dbui/mmresultdialogs.cxx      |   10 
 sw/source/uibase/dbui/mailmergehelper.cxx  |  331 +++++++++++++++++++++
 sw/source/uibase/inc/mailmergehelper.hxx   |   53 +++
 sw/uiconfig/swriter/ui/mmmailbody.ui       |   82 +----
 sw/uiconfig/swriter/ui/mmsalutationpage.ui |  117 ++-----
 8 files changed, 697 insertions(+), 463 deletions(-)

New commits:
commit a4b8df27b956610f6a481f0c25ba8ccc5ee21460
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Wed Oct 17 11:59:14 2018 +0100
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Thu Oct 18 10:23:45 2018 +0200

    weld SwMailMergeGreetingsPage and SwMailBodyDialog
    
    Change-Id: I7ac171654ec0a5095c05d1b54bec423b8eb9247b
    Reviewed-on: https://gerrit.libreoffice.org/61888
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/sw/source/ui/dbui/mailmergewizard.cxx b/sw/source/ui/dbui/mailmergewizard.cxx
index a862e377ce1b..ed43ce86e430 100644
--- a/sw/source/ui/dbui/mailmergewizard.cxx
+++ b/sw/source/ui/dbui/mailmergewizard.cxx
@@ -110,7 +110,7 @@ VclPtr<TabPage> SwMailMergeWizard::createPage(WizardState _nState)
             SetRoadmapHelpId("modules/swriter/ui/mmaddressblockpage/MMAddressBlockPage");
         break;
         case MM_GREETINGSPAGE      :
-            pRet = VclPtr<SwMailMergeGreetingsPage>::Create(this);
+            pRet = VclPtr<SwMailMergeGreetingsPage>::Create(this, TabPageParent(this));
             SetRoadmapHelpId("modules/swriter/ui/mmsalutationpage/MMSalutationPage");
         break;
         case MM_LAYOUTPAGE         :
diff --git a/sw/source/ui/dbui/mmgreetingspage.cxx b/sw/source/ui/dbui/mmgreetingspage.cxx
index 85a395f0671a..2723fb04849e 100644
--- a/sw/source/ui/dbui/mmgreetingspage.cxx
+++ b/sw/source/ui/dbui/mmgreetingspage.cxx
@@ -34,64 +34,42 @@ using namespace svt;
 using namespace ::com::sun::star;
 using namespace ::com::sun::star::uno;
 
-static void lcl_FillGreetingsBox(ListBox& rBox,
+static void lcl_FillGreetingsBox(weld::ComboBox& rBox,
                         SwMailMergeConfigItem const & rConfig,
                         SwMailMergeConfigItem::Gender eType)
 {
     const Sequence< OUString> rEntries = rConfig.GetGreetings(eType);
     for(sal_Int32 nEntry = 0; nEntry < rEntries.getLength(); ++nEntry)
-        rBox.InsertEntry(rEntries[nEntry]);
-    rBox.SelectEntryPos(rConfig.GetCurrentGreeting(eType));
+        rBox.append_text(rEntries[nEntry]);
+    rBox.set_active(rConfig.GetCurrentGreeting(eType));
 }
 
-static void lcl_FillGreetingsBox(ComboBox& rBox,
-                        SwMailMergeConfigItem const & rConfig,
-                        SwMailMergeConfigItem::Gender eType)
-{
-    const Sequence< OUString> rEntries = rConfig.GetGreetings(eType);
-    for(sal_Int32 nEntry = 0; nEntry < rEntries.getLength(); ++nEntry)
-        rBox.InsertEntry(rEntries[nEntry]);
-    rBox.SelectEntryPos(rConfig.GetCurrentGreeting(eType));
-}
-
-static void lcl_StoreGreetingsBox(ListBox const & rBox,
-                        SwMailMergeConfigItem& rConfig,
-                        SwMailMergeConfigItem::Gender eType)
-{
-    Sequence< OUString> aEntries(rBox.GetEntryCount());
-    OUString* pEntries = aEntries.getArray();
-    for(sal_Int32 nEntry = 0; nEntry < rBox.GetEntryCount(); ++nEntry)
-        pEntries[nEntry] = rBox.GetEntry(nEntry);
-    rConfig.SetGreetings(eType, aEntries);
-    rConfig.SetCurrentGreeting(eType, rBox.GetSelectedEntryPos());
-}
-
-static void lcl_StoreGreetingsBox(ComboBox const & rBox,
+static void lcl_StoreGreetingsBox(const weld::ComboBox& rBox,
                         SwMailMergeConfigItem& rConfig,
                         SwMailMergeConfigItem::Gender eType)
 {
-    Sequence< OUString> aEntries(rBox.GetEntryCount());
+    Sequence< OUString> aEntries(rBox.get_count());
     OUString* pEntries = aEntries.getArray();
-    for(sal_Int32 nEntry = 0; nEntry < rBox.GetEntryCount(); ++nEntry)
-        pEntries[nEntry] = rBox.GetEntry(nEntry);
+    for(sal_Int32 nEntry = 0; nEntry < rBox.get_count(); ++nEntry)
+        pEntries[nEntry] = rBox.get_text(nEntry);
     rConfig.SetGreetings(eType, aEntries);
-    rConfig.SetCurrentGreeting(eType, rBox.GetSelectedEntryPos());
+    rConfig.SetCurrentGreeting(eType, rBox.get_active());
 }
 
-IMPL_LINK_NOARG(SwGreetingsHandler, IndividualHdl_Impl, Button*, void)
+IMPL_LINK_NOARG(SwGreetingsHandler, IndividualHdl_Impl, weld::ToggleButton&, void)
 {
-    bool bIndividual = m_pPersonalizedCB->IsEnabled() && m_pPersonalizedCB->IsChecked();
-    m_pFemaleFT->Enable(bIndividual);
-    m_pFemaleLB->Enable(bIndividual);
-    m_pFemalePB->Enable(bIndividual);
-    m_pMaleFT->Enable(bIndividual);
-    m_pMaleLB->Enable(bIndividual);
-    m_pMalePB->Enable(bIndividual);
-    m_pFemaleFI->Enable(bIndividual);
-    m_pFemaleColumnFT->Enable(bIndividual);
-    m_pFemaleColumnLB->Enable(bIndividual);
-    m_pFemaleFieldFT->Enable(bIndividual);
-    m_pFemaleFieldCB->Enable(bIndividual);
+    bool bIndividual = m_xPersonalizedCB->get_sensitive() && m_xPersonalizedCB->get_active();
+    m_xFemaleFT->set_sensitive(bIndividual);
+    m_xFemaleLB->set_sensitive(bIndividual);
+    m_xFemalePB->set_sensitive(bIndividual);
+    m_xMaleFT->set_sensitive(bIndividual);
+    m_xMaleLB->set_sensitive(bIndividual);
+    m_xMalePB->set_sensitive(bIndividual);
+    m_xFemaleFI->set_sensitive(bIndividual);
+    m_xFemaleColumnFT->set_sensitive(bIndividual);
+    m_xFemaleColumnLB->set_sensitive(bIndividual);
+    m_xFemaleFieldFT->set_sensitive(bIndividual);
+    m_xFemaleFieldCB->set_sensitive(bIndividual);
 
     if( m_bIsTabPage )
     {
@@ -102,17 +80,18 @@ IMPL_LINK_NOARG(SwGreetingsHandler, IndividualHdl_Impl, Button*, void)
     UpdatePreview();
 }
 
-IMPL_LINK(SwGreetingsHandler, GreetingHdl_Impl, Button*, pButton, void)
+IMPL_LINK(SwGreetingsHandler, GreetingHdl_Impl, weld::Button&, rButton, void)
 {
     ScopedVclPtr<SwCustomizeAddressBlockDialog> pDlg(
-            VclPtr<SwCustomizeAddressBlockDialog>::Create(pButton, m_rConfigItem,
-                        pButton == m_pMalePB ?
+            VclPtr<SwCustomizeAddressBlockDialog>::Create(nullptr /*TODO*/, m_rConfigItem,
+                        &rButton == m_xMalePB.get() ?
                         SwCustomizeAddressBlockDialog::GREETING_MALE :
                         SwCustomizeAddressBlockDialog::GREETING_FEMALE ));
-    if(RET_OK == pDlg->Execute())
+    if (RET_OK == pDlg->Execute())
     {
-        ListBox* pToInsert = pButton == m_pMalePB ? m_pMaleLB.get() : m_pFemaleLB.get();
-        pToInsert->SelectEntryPos(pToInsert->InsertEntry(pDlg->GetAddress()));
+        weld::ComboBox* pToInsert = &rButton == m_xMalePB.get() ? m_xMaleLB.get() : m_xFemaleLB.get();
+        pToInsert->append_text(pDlg->GetAddress());
+        pToInsert->set_active(pToInsert->get_count() - 1);
         if(m_bIsTabPage)
         {
             m_pWizard->UpdateRoadmap();
@@ -122,16 +101,16 @@ IMPL_LINK(SwGreetingsHandler, GreetingHdl_Impl, Button*, pButton, void)
     }
 }
 
-void    SwGreetingsHandler::UpdatePreview()
+void SwGreetingsHandler::UpdatePreview()
 {
     //the base class does nothing
 }
 
-IMPL_LINK(SwMailMergeGreetingsPage, AssignHdl_Impl, Button*, pButton, void)
+IMPL_LINK_NOARG(SwMailMergeGreetingsPage, AssignHdl_Impl, weld::Button&, void)
 {
-    const OUString sPreview(m_pFemaleLB->GetSelectedEntry() + "\n" + m_pMaleLB->GetSelectedEntry());
+    const OUString sPreview(m_xFemaleLB->get_active_text() + "\n" + m_xMaleLB->get_active_text());
     ScopedVclPtr<SwAssignFieldsDialog> pDlg(
-            VclPtr<SwAssignFieldsDialog>::Create(pButton, m_rConfigItem, sPreview, false));
+            VclPtr<SwAssignFieldsDialog>::Create(nullptr /*TODO*/, m_rConfigItem, sPreview, false));
     if(RET_OK == pDlg->Execute())
     {
         UpdatePreview();
@@ -140,15 +119,12 @@ IMPL_LINK(SwMailMergeGreetingsPage, AssignHdl_Impl, Button*, pButton, void)
     }
 }
 
-IMPL_LINK_NOARG(SwMailMergeGreetingsPage, GreetingSelectHdl_Impl, Edit&, void)
-{
-    UpdatePreview();
-}
-IMPL_LINK_NOARG(SwMailMergeGreetingsPage, GreetingSelectListBoxHdl_Impl, ListBox&, void)
+IMPL_LINK_NOARG(SwMailMergeGreetingsPage, GreetingSelectListBoxHdl_Impl, weld::ComboBox&, void)
 {
     UpdatePreview();
 }
-IMPL_LINK_NOARG(SwMailMergeGreetingsPage, GreetingSelectComboBoxHdl_Impl, ComboBox&, void)
+
+IMPL_LINK_NOARG(SwMailMergeGreetingsPage, GreetingSelectComboBoxHdl_Impl, weld::ComboBox&, void)
 {
     UpdatePreview();
 }
@@ -157,11 +133,11 @@ void SwMailMergeGreetingsPage::UpdatePreview()
 {
     //find out which type of greeting should be selected:
     bool bFemale = false;
-    bool bNoValue = !m_pFemaleColumnLB->IsEnabled();
+    bool bNoValue = !m_xFemaleColumnLB->get_sensitive();
     if( !bNoValue )
     {
-        const OUString sFemaleValue = m_pFemaleFieldCB->GetText();
-        const OUString sFemaleColumn = m_pFemaleColumnLB->GetSelectedEntry();
+        const OUString sFemaleValue = m_xFemaleFieldCB->get_active_text();
+        const OUString sFemaleColumn = m_xFemaleColumnLB->get_active_text();
         Reference< sdbcx::XColumnsSupplier > xColsSupp( m_rConfigItem.GetResultSet(), UNO_QUERY);
         Reference < container::XNameAccess> xColAccess = xColsSupp.is() ? xColsSupp->getColumns() : nullptr;
         if(!sFemaleValue.isEmpty() && !sFemaleColumn.isEmpty() &&
@@ -196,99 +172,79 @@ void SwMailMergeGreetingsPage::UpdatePreview()
         }
     }
 
-    OUString sPreview = bFemale ? m_pFemaleLB->GetSelectedEntry() :
-        bNoValue ? m_pNeutralCB->GetText() : m_pMaleLB->GetSelectedEntry();
+    OUString sPreview = bFemale ? m_xFemaleLB->get_active_text() :
+        bNoValue ? m_xNeutralCB->get_active_text() : m_xMaleLB->get_active_text();
 
     sPreview = SwAddressPreview::FillData(sPreview, m_rConfigItem);
-    m_pPreviewWIN->SetAddress(sPreview);
+    m_xPreview->SetAddress(sPreview);
 }
 
-void    SwGreetingsHandler::Contains(bool bContainsGreeting)
+void SwGreetingsHandler::Contains(bool bContainsGreeting)
 {
-    m_pPersonalizedCB->Enable(bContainsGreeting);
-    bool bEnablePersonal = bContainsGreeting && m_pPersonalizedCB->IsChecked();
-    m_pFemaleFT->Enable(bEnablePersonal);
-    m_pFemaleLB->Enable(bEnablePersonal);
-    m_pFemalePB->Enable(bEnablePersonal);
-    m_pMaleFT->Enable(bEnablePersonal);
-    m_pMaleLB->Enable(bEnablePersonal);
-    m_pMalePB->Enable(bEnablePersonal);
-    m_pFemaleFI->Enable(bEnablePersonal);
-    m_pFemaleColumnFT->Enable(bEnablePersonal);
-    m_pFemaleColumnLB->Enable(bEnablePersonal);
-    m_pFemaleFieldFT->Enable(bEnablePersonal);
-    m_pFemaleFieldCB->Enable(bEnablePersonal);
-
-    m_pNeutralFT->Enable(bContainsGreeting);
-    m_pNeutralCB->Enable(bContainsGreeting);
+    m_xPersonalizedCB->set_sensitive(bContainsGreeting);
+    bool bEnablePersonal = bContainsGreeting && m_xPersonalizedCB->get_active();
+    m_xFemaleFT->set_sensitive(bEnablePersonal);
+    m_xFemaleLB->set_sensitive(bEnablePersonal);
+    m_xFemalePB->set_sensitive(bEnablePersonal);
+    m_xMaleFT->set_sensitive(bEnablePersonal);
+    m_xMaleLB->set_sensitive(bEnablePersonal);
+    m_xMalePB->set_sensitive(bEnablePersonal);
+    m_xFemaleFI->set_sensitive(bEnablePersonal);
+    m_xFemaleColumnFT->set_sensitive(bEnablePersonal);
+    m_xFemaleColumnLB->set_sensitive(bEnablePersonal);
+    m_xFemaleFieldFT->set_sensitive(bEnablePersonal);
+    m_xFemaleFieldCB->set_sensitive(bEnablePersonal);
+    m_xNeutralFT->set_sensitive(bContainsGreeting);
+    m_xNeutralCB->set_sensitive(bContainsGreeting);
 }
 
-SwMailMergeGreetingsPage::SwMailMergeGreetingsPage(SwMailMergeWizard* _pParent)
-    : svt::OWizardPage(_pParent, "MMSalutationPage",
-        "modules/swriter/ui/mmsalutationpage.ui"),
-    SwGreetingsHandler(_pParent->GetConfigItem())
+SwMailMergeGreetingsPage::SwMailMergeGreetingsPage(SwMailMergeWizard* pWizard, TabPageParent pParent)
+    : svt::OWizardPage(pParent, "modules/swriter/ui/mmsalutationpage.ui", "MMSalutationPage")
+    , SwGreetingsHandler(pWizard->GetConfigItem(), *m_xBuilder)
+    , m_xPreview(new AddressPreview(m_xBuilder->weld_scrolled_window("previewwin")))
+    , m_xPreviewFI(m_xBuilder->weld_label("previewft"))
+    , m_xAssignPB(m_xBuilder->weld_button("assign"))
+    , m_xDocumentIndexFI(m_xBuilder->weld_label("documentindex"))
+    , m_xPrevSetIB(m_xBuilder->weld_button("prev"))
+    , m_xNextSetIB(m_xBuilder->weld_button("next"))
+    , m_xPreviewWIN(new weld::CustomWeld(*m_xBuilder, "preview", *m_xPreview))
 {
-    m_pWizard = _pParent;
-
-    get(m_pGreetingLineCB, "greeting");
-    get(m_pPersonalizedCB, "personalized");
-    get(m_pFemaleFT, "femaleft");
-    get(m_pFemaleLB, "female");
-    get(m_pFemalePB, "newfemale");
-    get(m_pMaleFT, "maleft");
-    get(m_pMaleLB, "male");
-    get(m_pMalePB, "newmale");
-    get(m_pFemaleFI, "femalefi");
-    get(m_pFemaleColumnFT, "femalecolft");
-    get(m_pFemaleColumnLB, "femalecol");
-    get(m_pFemaleFieldFT, "femalefieldft");
-    get(m_pFemaleFieldCB, "femalefield");
-    get(m_pNeutralFT, "generalft");
-    get(m_pNeutralCB, "general");
-    get(m_pPreviewFI, "previewft");
-    get(m_pPreviewWIN, "preview");
-    Size aSize(LogicToPixel(Size(186, 21), MapMode(MapUnit::MapAppFont)));
-    m_pPreviewWIN->set_width_request(aSize.Width());
-    m_pPreviewWIN->set_height_request(aSize.Height());
-    get(m_pAssignPB, "assign");
-    get(m_pDocumentIndexFI, "documentindex");
-    m_sDocument = m_pDocumentIndexFI->GetText();
-    get(m_pPrevSetIB, "prev");
-    get(m_pNextSetIB, "next");
+    m_pWizard = pWizard;
+
+    Size aSize(m_xPreview->GetDrawingArea()->get_ref_device().LogicToPixel(Size(186, 21), MapMode(MapUnit::MapAppFont)));
+    m_xPreviewWIN->set_size_request(aSize.Width(), aSize.Height());
+    m_sDocument = m_xDocumentIndexFI->get_label();
 
     m_bIsTabPage = true;
 
-    m_pGreetingLineCB->SetClickHdl(LINK(this, SwMailMergeGreetingsPage, ContainsHdl_Impl));
-    Link<Button*,void> aIndividualLink = LINK(this, SwGreetingsHandler, IndividualHdl_Impl);
-    m_pPersonalizedCB->SetClickHdl(aIndividualLink);
-    Link<Button*,void> aGreetingLink = LINK(this, SwGreetingsHandler, GreetingHdl_Impl);
-    m_pFemalePB->SetClickHdl(aGreetingLink);
-    m_pMalePB->SetClickHdl(aGreetingLink);
-    m_pAssignPB->SetClickHdl(LINK(this, SwMailMergeGreetingsPage, AssignHdl_Impl));
-    Link<Edit&,void> aLBoxLink = LINK(this, SwMailMergeGreetingsPage, GreetingSelectHdl_Impl);
-    Link<ListBox&,void> aLBoxLink2 = LINK(this, SwMailMergeGreetingsPage, GreetingSelectListBoxHdl_Impl);
-    m_pFemaleLB->SetSelectHdl(aLBoxLink2);
-    m_pMaleLB->SetSelectHdl(aLBoxLink2);
-    m_pFemaleColumnLB->SetSelectHdl(aLBoxLink2);
-    m_pFemaleFieldCB->SetSelectHdl(LINK(this, SwMailMergeGreetingsPage, GreetingSelectComboBoxHdl_Impl));
-    m_pFemaleFieldCB->SetModifyHdl(aLBoxLink);
-    m_pNeutralCB->SetSelectHdl(LINK(this, SwMailMergeGreetingsPage, GreetingSelectComboBoxHdl_Impl));
-    m_pNeutralCB->SetModifyHdl(aLBoxLink);
-
-    Link<Button*,void> aDataLink = LINK(this, SwMailMergeGreetingsPage, InsertDataHdl_Impl);
-    m_pPrevSetIB->SetClickHdl(aDataLink);
-    m_pNextSetIB->SetClickHdl(aDataLink);
-
-    m_pGreetingLineCB->Check(m_rConfigItem.IsGreetingLine(false));
-    m_pPersonalizedCB->Check(m_rConfigItem.IsIndividualGreeting(false));
-    ContainsHdl_Impl(m_pGreetingLineCB);
-    aIndividualLink.Call(nullptr);
-
-    lcl_FillGreetingsBox(*m_pFemaleLB, m_rConfigItem, SwMailMergeConfigItem::FEMALE);
-    lcl_FillGreetingsBox(*m_pMaleLB, m_rConfigItem, SwMailMergeConfigItem::MALE);
-    lcl_FillGreetingsBox(*m_pNeutralCB, m_rConfigItem, SwMailMergeConfigItem::NEUTRAL);
-
-    m_pDocumentIndexFI->SetText(m_sDocument.replaceFirst("%1", "1"));
+    m_xGreetingLineCB->connect_toggled(LINK(this, SwMailMergeGreetingsPage, ContainsHdl_Impl));
+    Link<weld::ToggleButton&,void> aIndividualLink = LINK(this, SwGreetingsHandler, IndividualHdl_Impl);
+    m_xPersonalizedCB->connect_toggled(aIndividualLink);
+    Link<weld::Button&,void> aGreetingLink = LINK(this, SwGreetingsHandler, GreetingHdl_Impl);
+    m_xFemalePB->connect_clicked(aGreetingLink);
+    m_xMalePB->connect_clicked(aGreetingLink);
+    m_xAssignPB->connect_clicked(LINK(this, SwMailMergeGreetingsPage, AssignHdl_Impl));
+    Link<weld::ComboBox&,void> aLBoxLink2 = LINK(this, SwMailMergeGreetingsPage, GreetingSelectListBoxHdl_Impl);
+    m_xFemaleLB->connect_changed(aLBoxLink2);
+    m_xMaleLB->connect_changed(aLBoxLink2);
+    m_xFemaleColumnLB->connect_changed(aLBoxLink2);
+    m_xFemaleFieldCB->connect_changed(LINK(this, SwMailMergeGreetingsPage, GreetingSelectComboBoxHdl_Impl));
+    m_xNeutralCB->connect_changed(LINK(this, SwMailMergeGreetingsPage, GreetingSelectComboBoxHdl_Impl));
+
+    Link<weld::Button&,void> aDataLink = LINK(this, SwMailMergeGreetingsPage, InsertDataHdl_Impl);
+    m_xPrevSetIB->connect_clicked(aDataLink);
+    m_xNextSetIB->connect_clicked(aDataLink);
+
+    m_xGreetingLineCB->set_active(m_rConfigItem.IsGreetingLine(false));
+    m_xPersonalizedCB->set_active(m_rConfigItem.IsIndividualGreeting(false));
+    ContainsHdl_Impl(*m_xGreetingLineCB);
+    aIndividualLink.Call(*m_xPersonalizedCB);
+
+    lcl_FillGreetingsBox(*m_xFemaleLB, m_rConfigItem, SwMailMergeConfigItem::FEMALE);
+    lcl_FillGreetingsBox(*m_xMaleLB, m_rConfigItem, SwMailMergeConfigItem::MALE);
+    lcl_FillGreetingsBox(*m_xNeutralCB, m_rConfigItem, SwMailMergeConfigItem::NEUTRAL);
+
+    m_xDocumentIndexFI->set_label(m_sDocument.replaceFirst("%1", "1"));
 }
 
 SwMailMergeGreetingsPage::~SwMailMergeGreetingsPage()
@@ -298,33 +254,29 @@ SwMailMergeGreetingsPage::~SwMailMergeGreetingsPage()
 
 void SwMailMergeGreetingsPage::dispose()
 {
-    m_pPreviewFI.clear();
-    m_pPreviewWIN.clear();
-    m_pAssignPB.clear();
-    m_pDocumentIndexFI.clear();
-    m_pPrevSetIB.clear();
-    m_pNextSetIB.clear();
+    m_xPreviewWIN.reset();
+    m_xPreview.reset();
     svt::OWizardPage::dispose();
 }
 
 void SwMailMergeGreetingsPage::ActivatePage()
 {
     //try to find the gender setting
-    m_pFemaleColumnLB->Clear();
+    m_xFemaleColumnLB->clear();
     Reference< sdbcx::XColumnsSupplier > xColsSupp = m_rConfigItem.GetColumnsSupplier();
     if(xColsSupp.is())
     {
         Reference < container::XNameAccess> xColAccess = xColsSupp->getColumns();
         Sequence< OUString > aColumns = xColAccess->getElementNames();
         for(sal_Int32 nName = 0; nName < aColumns.getLength(); ++nName)
-            m_pFemaleColumnLB->InsertEntry(aColumns[nName]);
+            m_xFemaleColumnLB->append_text(aColumns[nName]);
     }
 
-    m_pFemaleColumnLB->SelectEntry(m_rConfigItem.GetAssignedColumn(MM_PART_GENDER));
-    m_pFemaleColumnLB->SaveValue();
+    m_xFemaleColumnLB->set_active_text(m_rConfigItem.GetAssignedColumn(MM_PART_GENDER));
+    m_xFemaleColumnLB->save_value();
 
-    m_pFemaleFieldCB->SetText(m_rConfigItem.GetFemaleGenderValue());
-    m_pFemaleFieldCB->SaveValue();
+    m_xFemaleFieldCB->set_entry_text(m_rConfigItem.GetFemaleGenderValue());
+    m_xFemaleFieldCB->save_value();
 
     UpdatePreview();
     m_pWizard->enableButtons(WizardButtonFlags::NEXT, m_pWizard->isStateEnabled(MM_LAYOUTPAGE));
@@ -332,63 +284,54 @@ void SwMailMergeGreetingsPage::ActivatePage()
 
 bool SwMailMergeGreetingsPage::commitPage( ::svt::WizardTypes::CommitPageReason )
 {
-    if (m_pFemaleColumnLB->IsValueChangedFromSaved())
+    if (m_xFemaleColumnLB->get_value_changed_from_saved())
     {
         const SwDBData& rDBData = m_rConfigItem.GetCurrentDBData();
         Sequence< OUString> aAssignment = m_rConfigItem.GetColumnAssignment( rDBData );
         if(aAssignment.getLength() <= MM_PART_GENDER)
             aAssignment.realloc(MM_PART_GENDER + 1);
-        aAssignment[MM_PART_GENDER] = m_pFemaleColumnLB->GetSelectedEntry();
+        aAssignment[MM_PART_GENDER] = m_xFemaleColumnLB->get_active_text();
         m_rConfigItem.SetColumnAssignment( rDBData, aAssignment );
     }
-    if (m_pFemaleFieldCB->IsValueChangedFromSaved())
-        m_rConfigItem.SetFemaleGenderValue(m_pFemaleFieldCB->GetText());
+    if (m_xFemaleFieldCB->get_value_changed_from_saved())
+        m_rConfigItem.SetFemaleGenderValue(m_xFemaleFieldCB->get_active_text());
 
-    lcl_StoreGreetingsBox(*m_pFemaleLB, m_rConfigItem, SwMailMergeConfigItem::FEMALE);
-    lcl_StoreGreetingsBox(*m_pMaleLB, m_rConfigItem, SwMailMergeConfigItem::MALE);
+    lcl_StoreGreetingsBox(*m_xFemaleLB, m_rConfigItem, SwMailMergeConfigItem::FEMALE);
+    lcl_StoreGreetingsBox(*m_xMaleLB, m_rConfigItem, SwMailMergeConfigItem::MALE);
 
-    sal_Int32 nCurrentTextPos = m_pNeutralCB->GetEntryPos(m_pNeutralCB->GetText());
-    if(COMBOBOX_ENTRY_NOTFOUND == nCurrentTextPos)
+    sal_Int32 nCurrentTextPos = m_xNeutralCB->find_text(m_xNeutralCB->get_active_text());
+    if (nCurrentTextPos == -1)
     {
-        sal_Int32 nCount = m_pNeutralCB->GetEntryCount();
-        m_pNeutralCB->InsertEntry(m_pNeutralCB->GetText(), nCount);
-        m_pNeutralCB->SelectEntryPos(nCount);
+        m_xNeutralCB->append_text(m_xNeutralCB->get_active_text());
+        m_xNeutralCB->set_active(m_xNeutralCB->get_count() - 1);
     }
-    lcl_StoreGreetingsBox(*m_pNeutralCB, m_rConfigItem, SwMailMergeConfigItem::NEUTRAL);
-    m_rConfigItem.SetGreetingLine(m_pGreetingLineCB->IsChecked(), false);
-    m_rConfigItem.SetIndividualGreeting(m_pPersonalizedCB->IsChecked(), false);
+    lcl_StoreGreetingsBox(*m_xNeutralCB, m_rConfigItem, SwMailMergeConfigItem::NEUTRAL);
+    m_rConfigItem.SetGreetingLine(m_xGreetingLineCB->get_active(), false);
+    m_rConfigItem.SetIndividualGreeting(m_xPersonalizedCB->get_active(), false);
     return true;
 }
 
-IMPL_LINK(SwMailMergeGreetingsPage, ContainsHdl_Impl, Button*, pBox, void)
+IMPL_LINK(SwMailMergeGreetingsPage, ContainsHdl_Impl, weld::ToggleButton&, rBox, void)
 {
-    bool bContainsGreeting = static_cast<CheckBox*>(pBox)->IsChecked();
+    bool bContainsGreeting = rBox.get_active();
     SwGreetingsHandler::Contains(bContainsGreeting);
-    m_pPreviewFI-> Enable(bContainsGreeting);
-    m_pPreviewWIN->Enable(bContainsGreeting);
-    m_pAssignPB->  Enable(bContainsGreeting);
-    m_pDocumentIndexFI->  Enable(bContainsGreeting);
-    m_pPrevSetIB->Enable(bContainsGreeting);
-    m_pNextSetIB->Enable(bContainsGreeting);
-    m_rConfigItem.SetGreetingLine(m_pGreetingLineCB->IsChecked(), false);
+    m_xPreviewFI->set_sensitive(bContainsGreeting);
+    m_xPreviewWIN->set_sensitive(bContainsGreeting);
+    m_xAssignPB->set_sensitive(bContainsGreeting);
+    m_xDocumentIndexFI->set_sensitive(bContainsGreeting);
+    m_xPrevSetIB->set_sensitive(bContainsGreeting);
+    m_xNextSetIB->set_sensitive(bContainsGreeting);
+    m_rConfigItem.SetGreetingLine(m_xGreetingLineCB->get_active(), false);
     m_pWizard->UpdateRoadmap();
     m_pWizard->enableButtons(WizardButtonFlags::NEXT, m_pWizard->isStateEnabled(MM_LAYOUTPAGE));
 }
 
-IMPL_LINK(SwMailMergeGreetingsPage, InsertDataHdl_Impl, Button*, pButton, void)
+IMPL_LINK(SwMailMergeGreetingsPage, InsertDataHdl_Impl, weld::Button&, rButton, void)
 {
-    //if no pButton is given, the first set has to be pre-set
-    if(!pButton)
-    {
-        m_rConfigItem.GetResultSet();
-    }
-    else
-    {
-        bool bNext = pButton == m_pNextSetIB;
-        sal_Int32 nPos = m_rConfigItem.GetResultSetPosition();
-        m_rConfigItem.MoveResultSet( bNext ? ++nPos : --nPos);
-    }
+    bool bNext = &rButton == m_xNextSetIB.get();
     sal_Int32 nPos = m_rConfigItem.GetResultSetPosition();
+    m_rConfigItem.MoveResultSet( bNext ? ++nPos : --nPos);
+    nPos = m_rConfigItem.GetResultSetPosition();
     bool bEnable = true;
     if(nPos < 1)
     {
@@ -397,119 +340,91 @@ IMPL_LINK(SwMailMergeGreetingsPage, InsertDataHdl_Impl, Button*, pButton, void)
     }
     else
         UpdatePreview();
-    m_pPrevSetIB->Enable(bEnable);
-    m_pNextSetIB->Enable(bEnable);
-    m_pDocumentIndexFI->Enable(bEnable);
-    m_pDocumentIndexFI->SetText(m_sDocument.replaceFirst("%1", OUString::number(nPos)));
+    m_xPrevSetIB->set_sensitive(bEnable);
+    m_xNextSetIB->set_sensitive(bEnable);
+    m_xDocumentIndexFI->set_sensitive(bEnable);
+    m_xDocumentIndexFI->set_label(m_sDocument.replaceFirst("%1", OUString::number(nPos)));
 }
 
-SwMailBodyDialog::SwMailBodyDialog(vcl::Window* pParent) :
-    SfxModalDialog(pParent, "MailBodyDialog", "modules/swriter/ui/mmmailbody.ui"),
-    SwGreetingsHandler(*GetActiveView()->GetMailMergeConfigItem())
+SwMailBodyDialog::SwMailBodyDialog(weld::Window* pParent)
+    : SfxDialogController(pParent, "modules/swriter/ui/mmmailbody.ui", "MailBodyDialog")
+    , SwGreetingsHandler(*GetActiveView()->GetMailMergeConfigItem(), *m_xBuilder)
+    , m_xBodyFT(m_xBuilder->weld_label("bodyft"))
+    , m_xBodyMLE(m_xBuilder->weld_text_view("bodymle"))
+    , m_xOK(m_xBuilder->weld_button("ok"))
 {
-    get(m_pGreetingLineCB, "greeting");
-    get(m_pPersonalizedCB, "personalized");
-    get(m_pFemaleFT, "femaleft");
-    get(m_pFemaleLB, "female");
-    get(m_pFemalePB, "newfemale");
-    get(m_pMaleFT, "maleft");
-    get(m_pMaleLB, "male");
-    get(m_pMalePB, "newmale");
-    get(m_pFemaleFI, "femalefi");
-    get(m_pFemaleColumnFT, "femalecolft");
-    get(m_pFemaleColumnLB, "femalecol");
-    get(m_pFemaleFieldFT, "femalefieldft");
-    get(m_pFemaleFieldCB, "femalefield");
-    get(m_pNeutralFT, "generalft");
-    get(m_pNeutralCB, "general");
-    get(m_pBodyFT, "bodyft");
-    get(m_pBodyMLE, "bodymle");
-    m_pBodyMLE->SetStyle(m_pBodyMLE->GetStyle() | WB_HSCROLL | WB_VSCROLL | WB_IGNORETAB);
-    Size aSize(LogicToPixel(Size(180, 50), MapMode(MapUnit::MapAppFont)));
-    m_pBodyMLE->set_width_request(aSize.Width());
-    m_pBodyMLE->set_height_request(aSize.Height());
-    get(m_pOK, "ok");
     m_bIsTabPage = false;
-
-    m_pGreetingLineCB->SetClickHdl(LINK(this, SwMailBodyDialog, ContainsHdl_Impl));
-    Link<Button*,void> aIndividualLink = LINK(this, SwGreetingsHandler, IndividualHdl_Impl);
-    m_pPersonalizedCB->SetClickHdl(aIndividualLink);
-    Link<Button*,void> aGreetingLink = LINK(this, SwGreetingsHandler, GreetingHdl_Impl);
-    m_pFemalePB->SetClickHdl(aGreetingLink);
-    m_pMalePB->SetClickHdl(aGreetingLink);
-    m_pOK->SetClickHdl(LINK(this, SwMailBodyDialog, OKHdl));
-
-    m_pGreetingLineCB->Check(m_rConfigItem.IsGreetingLine(true));
-    m_pPersonalizedCB->Check(m_rConfigItem.IsIndividualGreeting(true));
-    ContainsHdl_Impl(m_pGreetingLineCB);
-    aIndividualLink.Call(nullptr);
-
-    lcl_FillGreetingsBox(*m_pFemaleLB, m_rConfigItem, SwMailMergeConfigItem::FEMALE);
-    lcl_FillGreetingsBox(*m_pMaleLB, m_rConfigItem, SwMailMergeConfigItem::MALE);
-    lcl_FillGreetingsBox(*m_pNeutralCB, m_rConfigItem, SwMailMergeConfigItem::NEUTRAL);
+    m_xBodyMLE->set_size_request(m_xBodyMLE->get_approximate_digit_width() * 45,
+                                 m_xBodyMLE->get_height_rows(6));
+    m_xGreetingLineCB->connect_toggled(LINK(this, SwMailBodyDialog, ContainsHdl_Impl));
+    Link<weld::ToggleButton&,void> aIndividualLink = LINK(this, SwGreetingsHandler, IndividualHdl_Impl);
+    m_xPersonalizedCB->connect_toggled(aIndividualLink);
+    Link<weld::Button&,void> aGreetingLink = LINK(this, SwGreetingsHandler, GreetingHdl_Impl);
+    m_xFemalePB->connect_clicked(aGreetingLink);
+    m_xMalePB->connect_clicked(aGreetingLink);
+    m_xOK->connect_clicked(LINK(this, SwMailBodyDialog, OKHdl));
+
+    m_xGreetingLineCB->set_active(m_rConfigItem.IsGreetingLine(true));
+    m_xPersonalizedCB->set_active(m_rConfigItem.IsIndividualGreeting(true));
+    ContainsHdl_Impl(*m_xGreetingLineCB);
+    aIndividualLink.Call(*m_xPersonalizedCB);
+
+    lcl_FillGreetingsBox(*m_xFemaleLB, m_rConfigItem, SwMailMergeConfigItem::FEMALE);
+    lcl_FillGreetingsBox(*m_xMaleLB, m_rConfigItem, SwMailMergeConfigItem::MALE);
+    lcl_FillGreetingsBox(*m_xNeutralCB, m_rConfigItem, SwMailMergeConfigItem::NEUTRAL);
 
     //try to find the gender setting
-    m_pFemaleColumnLB->Clear();
+    m_xFemaleColumnLB->clear();
     Reference< sdbcx::XColumnsSupplier > xColsSupp = m_rConfigItem.GetColumnsSupplier();
     if(xColsSupp.is())
     {
         Reference < container::XNameAccess> xColAccess = xColsSupp->getColumns();
         Sequence< OUString > aColumns = xColAccess->getElementNames();
         for(sal_Int32 nName = 0; nName < aColumns.getLength(); ++nName)
-            m_pFemaleColumnLB->InsertEntry(aColumns[nName]);
+            m_xFemaleColumnLB->append_text(aColumns[nName]);
     }
 
-    m_pFemaleColumnLB->SelectEntry(m_rConfigItem.GetAssignedColumn(MM_PART_GENDER));
-    m_pFemaleColumnLB->SaveValue();
+    m_xFemaleColumnLB->set_active_text(m_rConfigItem.GetAssignedColumn(MM_PART_GENDER));
+    m_xFemaleColumnLB->save_value();
 
-    m_pFemaleFieldCB->SetText(m_rConfigItem.GetFemaleGenderValue());
-    m_pFemaleFieldCB->SaveValue();
+    m_xFemaleFieldCB->set_entry_text(m_rConfigItem.GetFemaleGenderValue());
+    m_xFemaleFieldCB->save_value();
 }
 
 SwMailBodyDialog::~SwMailBodyDialog()
 {
-    disposeOnce();
-}
-
-void SwMailBodyDialog::dispose()
-{
-    m_pBodyFT.clear();
-    m_pBodyMLE.clear();
-    m_pOK.clear();
-    SfxModalDialog::dispose();
 }
 
-IMPL_LINK(SwMailBodyDialog, ContainsHdl_Impl, Button*, pButton, void)
+IMPL_LINK(SwMailBodyDialog, ContainsHdl_Impl, weld::ToggleButton&, rBox, void)
 {
-    CheckBox* pBox = static_cast<CheckBox*>(pButton);
-    SwGreetingsHandler::Contains(pBox->IsChecked());
-    m_rConfigItem.SetGreetingLine(pBox->IsChecked(), true);
+    SwGreetingsHandler::Contains(rBox.get_active());
+    m_rConfigItem.SetGreetingLine(rBox.get_active(), true);
 }
 
-IMPL_LINK_NOARG(SwMailBodyDialog, OKHdl, Button*, void)
+IMPL_LINK_NOARG(SwMailBodyDialog, OKHdl, weld::Button&, void)
 {
     m_rConfigItem.SetGreetingLine(
-                m_pGreetingLineCB->IsChecked(), false);
+                m_xGreetingLineCB->get_active(), false);
     m_rConfigItem.SetIndividualGreeting(
-                m_pPersonalizedCB->IsChecked(), false);
+                m_xPersonalizedCB->get_active(), false);
 
-    if(m_pFemaleColumnLB->IsValueChangedFromSaved())
+    if (m_xFemaleColumnLB->get_value_changed_from_saved())
     {
         const SwDBData& rDBData = m_rConfigItem.GetCurrentDBData();
         Sequence< OUString> aAssignment = m_rConfigItem.GetColumnAssignment( rDBData );
-        sal_Int32 nPos = m_pFemaleColumnLB->GetSelectedEntryPos();
+        sal_Int32 nPos = m_xFemaleColumnLB->get_active();
         if(aAssignment.getLength() < MM_PART_GENDER)
             aAssignment.realloc(MM_PART_GENDER);
         if( nPos > 0 )
-            aAssignment[MM_PART_GENDER] = m_pFemaleColumnLB->GetSelectedEntry();
+            aAssignment[MM_PART_GENDER] = m_xFemaleColumnLB->get_active_text();
         else
             aAssignment[MM_PART_GENDER].clear();
         m_rConfigItem.SetColumnAssignment( rDBData, aAssignment );
     }
-    if(m_pFemaleFieldCB->IsValueChangedFromSaved())
-        m_rConfigItem.SetFemaleGenderValue(m_pFemaleFieldCB->GetText());
+    if (m_xFemaleFieldCB->get_value_changed_from_saved())
+        m_rConfigItem.SetFemaleGenderValue(m_xFemaleFieldCB->get_active_text());
 
-    EndDialog(RET_OK);
+    m_xDialog->response(RET_OK);
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/ui/dbui/mmgreetingspage.hxx b/sw/source/ui/dbui/mmgreetingspage.hxx
index bfbf365d4bb9..f45cfdcdf20b 100644
--- a/sw/source/ui/dbui/mmgreetingspage.hxx
+++ b/sw/source/ui/dbui/mmgreetingspage.hxx
@@ -32,93 +32,99 @@ class SwMailMergeWizard;
 class SwGreetingsHandler
 {
 protected:
-    VclPtr<CheckBox>           m_pGreetingLineCB;
-
-    VclPtr<CheckBox>           m_pPersonalizedCB;
-
-    VclPtr<FixedText>          m_pFemaleFT;
-    VclPtr<ListBox>            m_pFemaleLB;
-    VclPtr<PushButton>         m_pFemalePB;
-
-    VclPtr<FixedText>          m_pMaleFT;
-    VclPtr<ListBox>            m_pMaleLB;
-    VclPtr<PushButton>         m_pMalePB;
-
-    VclPtr<FixedText>          m_pFemaleFI;
-    VclPtr<FixedText>          m_pFemaleColumnFT;
-    VclPtr<ListBox>            m_pFemaleColumnLB;
-    VclPtr<FixedText>          m_pFemaleFieldFT;
-    VclPtr<ComboBox>           m_pFemaleFieldCB;
-
-    VclPtr<FixedText>          m_pNeutralFT;
-    VclPtr<ComboBox>           m_pNeutralCB;
-
-    bool                m_bIsTabPage;
-
     VclPtr<SwMailMergeWizard>  m_pWizard;
     /// The mail merge state, available even when m_pWizard is nullptr.
     SwMailMergeConfigItem& m_rConfigItem;
-
-    SwGreetingsHandler(SwMailMergeConfigItem& rConfigItem)
-        : m_bIsTabPage(false),
-        m_rConfigItem(rConfigItem)
+    bool m_bIsTabPage;
+
+    std::unique_ptr<weld::CheckButton> m_xGreetingLineCB;
+    std::unique_ptr<weld::CheckButton> m_xPersonalizedCB;
+    std::unique_ptr<weld::Label> m_xFemaleFT;
+    std::unique_ptr<weld::ComboBox> m_xFemaleLB;
+    std::unique_ptr<weld::Button> m_xFemalePB;
+    std::unique_ptr<weld::Label> m_xMaleFT;
+    std::unique_ptr<weld::ComboBox> m_xMaleLB;
+    std::unique_ptr<weld::Button> m_xMalePB;
+    std::unique_ptr<weld::Label> m_xFemaleFI;
+    std::unique_ptr<weld::Label> m_xFemaleColumnFT;
+    std::unique_ptr<weld::ComboBox> m_xFemaleColumnLB;
+    std::unique_ptr<weld::Label> m_xFemaleFieldFT;
+    std::unique_ptr<weld::ComboBox> m_xFemaleFieldCB;
+    std::unique_ptr<weld::Label> m_xNeutralFT;
+    std::unique_ptr<weld::ComboBox> m_xNeutralCB;
+
+    SwGreetingsHandler(SwMailMergeConfigItem& rConfigItem, weld::Builder& rBuilder)
+        : m_rConfigItem(rConfigItem)
+        , m_bIsTabPage(false)
+        , m_xGreetingLineCB(rBuilder.weld_check_button("greeting"))
+        , m_xPersonalizedCB(rBuilder.weld_check_button("personalized"))
+        , m_xFemaleFT(rBuilder.weld_label("femaleft"))
+        , m_xFemaleLB(rBuilder.weld_combo_box("female"))
+        , m_xFemalePB(rBuilder.weld_button("newfemale"))
+        , m_xMaleFT(rBuilder.weld_label("maleft"))
+        , m_xMaleLB(rBuilder.weld_combo_box("male"))
+        , m_xMalePB(rBuilder.weld_button("newmale"))
+        , m_xFemaleFI(rBuilder.weld_label("femalefi"))
+        , m_xFemaleColumnFT(rBuilder.weld_label("femalecolft"))
+        , m_xFemaleColumnLB(rBuilder.weld_combo_box("femalecol"))
+        , m_xFemaleFieldFT(rBuilder.weld_label("femalefieldft"))
+        , m_xFemaleFieldCB(rBuilder.weld_combo_box("femalefield"))
+        , m_xNeutralFT(rBuilder.weld_label("generalft"))
+        , m_xNeutralCB(rBuilder.weld_combo_box("general"))
     {
     }
 
     ~SwGreetingsHandler() {}
 
-    DECL_LINK(IndividualHdl_Impl, Button*, void);
-    DECL_LINK(GreetingHdl_Impl, Button*, void);
+    DECL_LINK(IndividualHdl_Impl, weld::ToggleButton&, void);
+    DECL_LINK(GreetingHdl_Impl, weld::Button&, void);
 
     void    Contains(bool bContainsGreeting);
     virtual void    UpdatePreview();
 };
 
-class SwMailMergeGreetingsPage : public svt::OWizardPage,
-                                    public SwGreetingsHandler
+class SwMailMergeGreetingsPage : public svt::OWizardPage
+                               , public SwGreetingsHandler
 {
-    VclPtr<FixedText>          m_pPreviewFI;
-    VclPtr<SwAddressPreview>   m_pPreviewWIN;
-    VclPtr<PushButton>         m_pAssignPB;
-    VclPtr<FixedText>          m_pDocumentIndexFI;
-    VclPtr<PushButton>         m_pPrevSetIB;
-    VclPtr<PushButton>         m_pNextSetIB;
+    std::unique_ptr<AddressPreview> m_xPreview;
+    std::unique_ptr<weld::Label> m_xPreviewFI;
+    std::unique_ptr<weld::Button> m_xAssignPB;
+    std::unique_ptr<weld::Label> m_xDocumentIndexFI;
+    std::unique_ptr<weld::Button> m_xPrevSetIB;
+    std::unique_ptr<weld::Button> m_xNextSetIB;
+    std::unique_ptr<weld::CustomWeld> m_xPreviewWIN;
 
     OUString            m_sDocument;
 
-    DECL_LINK(ContainsHdl_Impl, Button*, void);
-    DECL_LINK(InsertDataHdl_Impl, Button*, void);
-    DECL_LINK(GreetingSelectHdl_Impl, Edit&, void);
-    DECL_LINK(GreetingSelectComboBoxHdl_Impl, ComboBox&, void);
-    DECL_LINK(GreetingSelectListBoxHdl_Impl, ListBox&, void);
-    DECL_LINK(AssignHdl_Impl, Button*, void);
+    DECL_LINK(ContainsHdl_Impl, weld::ToggleButton&, void);
+    DECL_LINK(InsertDataHdl_Impl, weld::Button&, void);
+    DECL_LINK(GreetingSelectComboBoxHdl_Impl, weld::ComboBox&, void);
+    DECL_LINK(GreetingSelectListBoxHdl_Impl, weld::ComboBox&, void);
+    DECL_LINK(AssignHdl_Impl, weld::Button&, void);
 
     virtual void        UpdatePreview() override;
     virtual void        ActivatePage() override;
     virtual bool        commitPage( ::svt::WizardTypes::CommitPageReason _eReason ) override;
 public:
-        SwMailMergeGreetingsPage( SwMailMergeWizard* _pParent);
-        virtual ~SwMailMergeGreetingsPage() override;
+    SwMailMergeGreetingsPage(SwMailMergeWizard* pWizard, TabPageParent pParent);
+    virtual ~SwMailMergeGreetingsPage() override;
     virtual void dispose() override;
-
 };
 
-class SwMailBodyDialog : public SfxModalDialog, public SwGreetingsHandler
+class SwMailBodyDialog : public SfxDialogController, public SwGreetingsHandler
 {
-    VclPtr<FixedText>           m_pBodyFT;
-    VclPtr<VclMultiLineEdit>    m_pBodyMLE;
+    std::unique_ptr<weld::Label> m_xBodyFT;
+    std::unique_ptr<weld::TextView> m_xBodyMLE;
+    std::unique_ptr<weld::Button> m_xOK;
 
-    VclPtr<OKButton>            m_pOK;
-
-    DECL_LINK(ContainsHdl_Impl, Button*, void);
-    DECL_LINK(OKHdl, Button*, void);
+    DECL_LINK(ContainsHdl_Impl, weld::ToggleButton&, void);
+    DECL_LINK(OKHdl, weld::Button&, void);
 public:
-    SwMailBodyDialog(vcl::Window* pParent);
+    SwMailBodyDialog(weld::Window* pParent);
     virtual ~SwMailBodyDialog() override;
-    virtual void dispose() override;
 
-    void            SetBody(const OUString& rBody ) {m_pBodyMLE->SetText(rBody);}
-    OUString        GetBody() const {return m_pBodyMLE->GetText();}
+    void SetBody(const OUString& rBody ) { m_xBodyMLE->set_text(rBody); }
+    OUString GetBody() const { return m_xBodyMLE->get_text(); }
 };
 #endif
 
diff --git a/sw/source/ui/dbui/mmresultdialogs.cxx b/sw/source/ui/dbui/mmresultdialogs.cxx
index 9de7406d7b09..d4dc1b1932ac 100644
--- a/sw/source/ui/dbui/mmresultdialogs.cxx
+++ b/sw/source/ui/dbui/mmresultdialogs.cxx
@@ -849,13 +849,13 @@ IMPL_LINK(SwMMResultEmailDialog, SendTypeHdl_Impl, ListBox&, rBox, void)
     }
 }
 
-IMPL_LINK(SwMMResultEmailDialog, SendAsHdl_Impl, Button*, pButton, void)
+IMPL_LINK_NOARG(SwMMResultEmailDialog, SendAsHdl_Impl, Button*, void)
 {
-    VclPtr<SwMailBodyDialog> pDlg = VclPtr<SwMailBodyDialog>::Create(pButton);
-    pDlg->SetBody(m_sBody);
-    if(RET_OK == pDlg->Execute())
+    SwMailBodyDialog aDlg(GetFrameWeld());
+    aDlg.SetBody(m_sBody);
+    if (RET_OK == aDlg.run())
     {
-        m_sBody = pDlg->GetBody();
+        m_sBody = aDlg.GetBody();
     }
 }
 
diff --git a/sw/source/uibase/dbui/mailmergehelper.cxx b/sw/source/uibase/dbui/mailmergehelper.cxx
index c5ccb9a3c16d..26f9489dd346 100644
--- a/sw/source/uibase/dbui/mailmergehelper.cxx
+++ b/sw/source/uibase/dbui/mailmergehelper.cxx
@@ -544,6 +544,337 @@ OUString SwAddressPreview::FillData(
     return sAddress.makeStringAndClear();
 }
 
+AddressPreview::AddressPreview(std::unique_ptr<weld::ScrolledWindow> xWindow)
+    : m_xVScrollBar(std::move(xWindow))
+    , pImpl(new SwAddressPreview_Impl())
+{
+    m_xVScrollBar->set_user_managed_scrolling();
+    m_xVScrollBar->connect_vadjustment_changed(LINK(this, AddressPreview, ScrollHdl));
+}
+
+AddressPreview::~AddressPreview()
+{
+}
+
+IMPL_LINK_NOARG(AddressPreview, ScrollHdl, weld::ScrolledWindow&, void)
+{
+    Invalidate();
+}
+
+void AddressPreview::AddAddress(const OUString& rAddress)
+{
+    pImpl->aAddresses.push_back(rAddress);
+    UpdateScrollBar();
+}
+
+void AddressPreview::SetAddress(const OUString& rAddress)
+{
+    pImpl->aAddresses.clear();
+    pImpl->aAddresses.push_back(rAddress);
+    m_xVScrollBar->set_vpolicy(VclPolicyType::NEVER);
+    Invalidate();
+}
+
+sal_uInt16 AddressPreview::GetSelectedAddress()const
+{
+    OSL_ENSURE(pImpl->nSelectedAddress < pImpl->aAddresses.size(), "selection invalid");
+    return pImpl->nSelectedAddress;
+}
+
+void AddressPreview::SelectAddress(sal_uInt16 nSelect)
+{
+    OSL_ENSURE(pImpl->nSelectedAddress < pImpl->aAddresses.size(), "selection invalid");
+    pImpl->nSelectedAddress = nSelect;
+    // now make it visible..
+    sal_uInt16 nSelectRow = nSelect / pImpl->nColumns;
+    sal_uInt16 nStartRow = m_xVScrollBar->vadjustment_get_value();
+    if( (nSelectRow < nStartRow) || (nSelectRow >= (nStartRow + pImpl->nRows) ))
+        m_xVScrollBar->vadjustment_set_value(nSelectRow);
+}
+
+void AddressPreview::Clear()
+{
+    pImpl->aAddresses.clear();
+    pImpl->nSelectedAddress = 0;
+    UpdateScrollBar();
+}
+
+void AddressPreview::ReplaceSelectedAddress(const OUString& rNew)
+{
+    pImpl->aAddresses[pImpl->nSelectedAddress] = rNew;
+    Invalidate();
+}
+
+void AddressPreview::RemoveSelectedAddress()
+{
+    pImpl->aAddresses.erase(pImpl->aAddresses.begin() + pImpl->nSelectedAddress);
+    if(pImpl->nSelectedAddress)
+        --pImpl->nSelectedAddress;
+    UpdateScrollBar();
+    Invalidate();
+}
+
+void AddressPreview::SetLayout(sal_uInt16 nRows, sal_uInt16 nColumns)
+{
+    pImpl->nRows = nRows;
+    pImpl->nColumns = nColumns;
+    UpdateScrollBar();
+}
+
+void AddressPreview::EnableScrollBar()
+{
+    pImpl->bEnableScrollBar = true;
+}
+
+void AddressPreview::UpdateScrollBar()
+{
+    if (pImpl->nColumns)
+    {
+        sal_uInt16 nResultingRows = static_cast<sal_uInt16>(pImpl->aAddresses.size() + pImpl->nColumns - 1) / pImpl->nColumns;
+        ++nResultingRows;
+        auto nValue = m_xVScrollBar->vadjustment_get_value();
+        if (nValue > nResultingRows)
+            nValue = nResultingRows;
+        m_xVScrollBar->set_vpolicy(pImpl->bEnableScrollBar && nResultingRows > pImpl->nRows ? VclPolicyType::ALWAYS : VclPolicyType::NEVER);
+        m_xVScrollBar->vadjustment_configure(nValue, 0, nResultingRows, 1, 10, pImpl->nRows);
+    }
+}
+
+void AddressPreview::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle&)
+{
+    const StyleSettings& rSettings = rRenderContext.GetSettings().GetStyleSettings();
+    rRenderContext.SetFillColor(rSettings.GetWindowColor());
+    rRenderContext.SetLineColor(COL_TRANSPARENT);
+    rRenderContext.DrawRect(tools::Rectangle(Point(0, 0), GetOutputSizePixel()));
+    Color aPaintColor(IsEnabled() ? rSettings.GetWindowTextColor() : rSettings.GetDisableColor());
+    rRenderContext.SetLineColor(aPaintColor);
+    vcl::Font aFont(rRenderContext.GetFont());
+    aFont.SetColor(aPaintColor);
+    rRenderContext.SetFont(aFont);
+
+    Size aSize(GetOutputSizePixel());
+    sal_uInt16 nStartRow = 0;
+    if (m_xVScrollBar->get_vpolicy() != VclPolicyType::NEVER)
+    {
+        aSize.AdjustWidth(-m_xVScrollBar->get_vscroll_width());
+        nStartRow = m_xVScrollBar->vadjustment_get_value();
+    }
+    Size aPartSize(aSize.Width() / pImpl->nColumns,
+                   aSize.Height() / pImpl->nRows);
+    aPartSize.AdjustWidth( -2 );
+    aPartSize.AdjustHeight( -2 );
+
+    sal_uInt16 nAddress = nStartRow * pImpl->nColumns;
+    const sal_uInt16 nNumAddresses = static_cast<sal_uInt16>(pImpl->aAddresses.size());
+    for (sal_uInt16 nRow = 0; nRow < pImpl->nRows ; ++nRow)
+    {
+        for (sal_uInt16 nCol = 0; nCol < pImpl->nColumns; ++nCol)
+        {
+            if (nAddress >= nNumAddresses)
+                break;
+            Point aPos(nCol * aPartSize.Width(),
+                       nRow * aPartSize.Height());
+            aPos.Move(1, 1);
+            bool bIsSelected = nAddress == pImpl->nSelectedAddress;
+            if ((pImpl->nColumns * pImpl->nRows) == 1)
+                bIsSelected = false;
+            OUString adr(pImpl->aAddresses[nAddress]);
+            DrawText_Impl(rRenderContext, adr, aPos, aPartSize, bIsSelected);
+            ++nAddress;
+        }
+    }
+    rRenderContext.SetClipRegion();
+}
+
+void AddressPreview::MouseButtonDown( const MouseEvent& rMEvt )
+{
+    if (rMEvt.IsLeft() && pImpl->nRows && pImpl->nColumns)
+    {
+        //determine the selected address
+        const Point& rMousePos = rMEvt.GetPosPixel();
+        Size aSize(GetOutputSizePixel());
+        Size aPartSize( aSize.Width()/pImpl->nColumns, aSize.Height()/pImpl->nRows );
+        sal_uInt32 nRow = rMousePos.Y() / aPartSize.Height() ;
+        if (m_xVScrollBar->get_vpolicy() != VclPolicyType::NEVER)
+        {
+            nRow += m_xVScrollBar->vadjustment_get_value();
+        }
+        sal_uInt32 nCol = rMousePos.X() / aPartSize.Width();
+        sal_uInt32 nSelect = nRow * pImpl->nColumns + nCol;
+
+        if( nSelect < pImpl->aAddresses.size() &&
+                pImpl->nSelectedAddress != static_cast<sal_uInt16>(nSelect))
+        {
+            pImpl->nSelectedAddress = static_cast<sal_uInt16>(nSelect);
+            m_aSelectHdl.Call(nullptr);
+        }
+        Invalidate();
+    }
+}
+
+bool AddressPreview::KeyInput( const KeyEvent& rKEvt )
+{
+    sal_uInt16 nKey = rKEvt.GetKeyCode().GetCode();
+    bool bHandled = false;
+    if (pImpl->nRows && pImpl->nColumns)
+    {
+        sal_uInt32 nSelectedRow = pImpl->nSelectedAddress / pImpl->nColumns;
+        sal_uInt32 nSelectedColumn = pImpl->nSelectedAddress - (nSelectedRow * pImpl->nColumns);
+        switch(nKey)
+        {
+            case KEY_UP:
+                if(nSelectedRow)
+                    --nSelectedRow;
+                bHandled = true;
+            break;
+            case KEY_DOWN:
+                if(pImpl->aAddresses.size() > sal_uInt32(pImpl->nSelectedAddress + pImpl->nColumns))
+                    ++nSelectedRow;
+                bHandled = true;
+            break;
+            case KEY_LEFT:
+                if(nSelectedColumn)
+                    --nSelectedColumn;
+                bHandled = true;
+            break;
+            case KEY_RIGHT:
+                if(nSelectedColumn < sal_uInt32(pImpl->nColumns - 1) &&
+                       pImpl->aAddresses.size() - 1 > pImpl->nSelectedAddress )
+                    ++nSelectedColumn;
+                bHandled = true;
+            break;
+        }
+        sal_uInt32 nSelect = nSelectedRow * pImpl->nColumns + nSelectedColumn;
+        if( nSelect < pImpl->aAddresses.size() &&
+                pImpl->nSelectedAddress != static_cast<sal_uInt16>(nSelect))
+        {
+            pImpl->nSelectedAddress = static_cast<sal_uInt16>(nSelect);
+            m_aSelectHdl.Call(nullptr);
+            Invalidate();
+        }
+    }
+    return bHandled;
+}
+
+void AddressPreview::DrawText_Impl(vcl::RenderContext& rRenderContext, const OUString& rAddress,
+                                     const Point& rTopLeft, const Size& rSize, bool bIsSelected)
+{
+    rRenderContext.SetClipRegion(vcl::Region(tools::Rectangle(rTopLeft, rSize)));
+    if (bIsSelected)
+    {
+        //selection rectangle
+        rRenderContext.SetFillColor(COL_TRANSPARENT);
+        rRenderContext.DrawRect(tools::Rectangle(rTopLeft, rSize));
+    }
+    sal_Int32 nHeight = GetTextHeight();
+    Point aStart = rTopLeft;
+    //put it away from the border
+    aStart.Move(2, 2);
+    sal_Int32 nPos = 0;
+    do
+    {
+        rRenderContext.DrawText(aStart, rAddress.getToken(0, '\n', nPos));
+        aStart.AdjustY(nHeight );
+    }
+    while (nPos >= 0);
+}
+
+OUString AddressPreview::FillData(
+        const OUString& rAddress,
+        SwMailMergeConfigItem const & rConfigItem,
+        const Sequence< OUString>* pAssignments)
+{
+    //find the column names in the address string (with name assignment!) and
+    //exchange the placeholder (like <Firstname>) with the database content
+    //unassigned columns are expanded to <not assigned>
+    Reference< XColumnsSupplier > xColsSupp( rConfigItem.GetResultSet(), UNO_QUERY);
+    Reference <XNameAccess> xColAccess = xColsSupp.is() ? xColsSupp->getColumns() : nullptr;
+    Sequence< OUString> aAssignment = pAssignments ?
+                    *pAssignments :
+                    rConfigItem.GetColumnAssignment(
+                                                rConfigItem.GetCurrentDBData() );
+    const OUString* pAssignment = aAssignment.getConstArray();
+    const std::vector<std::pair<OUString, int>>& rDefHeaders = rConfigItem.GetDefaultAddressHeaders();
+    OUString sNotAssigned = "<" + SwResId(STR_NOTASSIGNED) + ">";
+
+    bool bIncludeCountry = rConfigItem.IsIncludeCountry();
+    const OUString rExcludeCountry = rConfigItem.GetExcludeCountry();
+    bool bSpecialReplacementForCountry = (!bIncludeCountry || !rExcludeCountry.isEmpty());
+    OUString sCountryColumn;
+    if( bSpecialReplacementForCountry )
+    {
+        sCountryColumn = rDefHeaders[MM_PART_COUNTRY].first;
+        Sequence< OUString> aSpecialAssignment =
+                        rConfigItem.GetColumnAssignment( rConfigItem.GetCurrentDBData() );
+        if(aSpecialAssignment.getLength() > MM_PART_COUNTRY && aSpecialAssignment[MM_PART_COUNTRY].getLength())
+            sCountryColumn = aSpecialAssignment[MM_PART_COUNTRY];
+    }
+
+    SwAddressIterator aIter(rAddress);
+    OUStringBuffer sAddress;
+    while(aIter.HasMore())
+    {
+        SwMergeAddressItem aItem = aIter.Next();
+        if(aItem.bIsColumn)
+        {
+            //get the default column name
+
+            //find the appropriate assignment
+            OUString sConvertedColumn = aItem.sText;
+            for(sal_uInt32 nColumn = 0;
+                    nColumn < rDefHeaders.size() && nColumn < sal_uInt32(aAssignment.getLength());
+                                                                                ++nColumn)
+            {
+                if (rDefHeaders[nColumn].first == aItem.sText &&
+                    !pAssignment[nColumn].isEmpty())
+                {
+                    sConvertedColumn = pAssignment[nColumn];
+                    break;
+                }
+            }
+            if(!sConvertedColumn.isEmpty() &&
+                    xColAccess.is() &&
+                    xColAccess->hasByName(sConvertedColumn))
+            {
+                //get the content and exchange it in the address string
+                Any aCol = xColAccess->getByName(sConvertedColumn);
+                Reference< XColumn > xColumn;
+                aCol >>= xColumn;
+                if(xColumn.is())
+                {
+                    try
+                    {
+                        OUString sReplace = xColumn->getString();
+
+                        if( bSpecialReplacementForCountry && sCountryColumn == sConvertedColumn )
+                        {
+                            if( !rExcludeCountry.isEmpty() && sReplace != rExcludeCountry )
+                                aItem.sText = sReplace;
+                            else
+                                aItem.sText.clear();
+                        }
+                        else
+                        {
+                            aItem.sText = sReplace;
+                        }
+                    }
+                    catch (const sdbc::SQLException&)
+                    {
+                        OSL_FAIL("SQLException caught");
+                    }
+                }
+            }
+            else
+            {
+                aItem.sText = sNotAssigned;
+            }
+
+        }
+        sAddress.append(aItem.sText);
+    }
+    return sAddress.makeStringAndClear();
+}
+
 SwMergeAddressItem   SwAddressIterator::Next()
 {
     //currently the string may either start with a '<' then it's a column
diff --git a/sw/source/uibase/inc/mailmergehelper.hxx b/sw/source/uibase/inc/mailmergehelper.hxx
index 13929d48e445..3d3a0d199be6 100644
--- a/sw/source/uibase/inc/mailmergehelper.hxx
+++ b/sw/source/uibase/inc/mailmergehelper.hxx
@@ -30,6 +30,8 @@
 #include <cppuhelper/implbase.hxx>
 #include <cppuhelper/compbase.hxx>
 #include <vcl/scrbar.hxx>
+#include <vcl/customweld.hxx>
+#include <vcl/weld.hxx>
 #include <rtl/ustring.hxx>
 #include <swdllapi.h>
 
@@ -111,6 +113,57 @@ public:
     void SetSelectHdl (const Link<LinkParamNone*,void>& rLink) { m_aSelectHdl = rLink; }
 };
 
+class SW_DLLPUBLIC AddressPreview : public weld::CustomWidgetController
+{
+    std::unique_ptr<weld::ScrolledWindow> m_xVScrollBar;
+    SwAddressPreview_Impl* pImpl;
+    Link<LinkParamNone*,void> m_aSelectHdl;
+
+    void DrawText_Impl(vcl::RenderContext& rRenderContext, const OUString& rAddress,
+                       const Point& rTopLeft, const Size& rSize, bool bIsSelected);
+
+    virtual void Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle&) override;
+    virtual void MouseButtonDown( const MouseEvent& rMEvt ) override;
+    virtual bool KeyInput( const KeyEvent& rKEvt ) override;
+    void UpdateScrollBar();
+
+    DECL_LINK(ScrollHdl, weld::ScrolledWindow&,void);
+
+public:
+    AddressPreview(std::unique_ptr<weld::ScrolledWindow> xParent);
+    virtual ~AddressPreview() override;
+
+    /** The address string is a list of address elements separated by spaces
+    and breaks. The addresses fit into the given layout. If more addresses then
+    rows/columns should be used a scrollbar will be added.
+
+     AddAddress appends the new address to the already added ones.
+     Initially the first added address will be selected
+    */
+    void AddAddress(const OUString& rAddress);
+    //  for preview mode - replaces the currently used address by the given one
+    void SetAddress(const OUString& rAddress);
+    // removes all addresses
+    void Clear();
+
+    // returns the selected address
+    sal_uInt16 GetSelectedAddress() const;
+    void SelectAddress(sal_uInt16 nSelect);
+    void ReplaceSelectedAddress(const OUString&);
+    void RemoveSelectedAddress();
+
+    // set the number of rows and columns of addresses
+    void SetLayout(sal_uInt16 nRows, sal_uInt16 nColumns);
+    void EnableScrollBar();
+
+    // fill the actual data into a string (address block or greeting)
+    static OUString FillData(const OUString& rAddress, SwMailMergeConfigItem const & rConfigItem,
+                             const css::uno::Sequence<OUString>* pAssignments = nullptr);
+
+    void SetSelectHdl (const Link<LinkParamNone*,void>& rLink) { m_aSelectHdl = rLink; }
+};
+
+
 // iterate over an address block or a greeting line the iterator returns the
 // parts either as pure string or as column
 struct SwMergeAddressItem
diff --git a/sw/uiconfig/swriter/ui/mmmailbody.ui b/sw/uiconfig/swriter/ui/mmmailbody.ui
index f54e2242d2a1..eb715fc1150f 100644
--- a/sw/uiconfig/swriter/ui/mmmailbody.ui
+++ b/sw/uiconfig/swriter/ui/mmmailbody.ui
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.16.1 -->
+<!-- Generated with glade 3.22.1 -->
 <interface domain="sw">
   <requires lib="gtk+" version="3.18"/>
   <object class="GtkDialog" id="MailBodyDialog">
@@ -7,6 +7,9 @@
     <property name="border_width">6</property>
     <property name="title" translatable="yes" context="mmmailbody|MailBodyDialog">E-Mail Message</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>
@@ -87,38 +90,44 @@
                   <object class="GtkLabel" id="bodyft">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="xalign">0</property>
                     <property name="label" translatable="yes" context="mmmailbody|bodyft">Write your message here</property>
                     <property name="use_underline">True</property>
-                    <property name="mnemonic_widget">bodymle:border</property>
+                    <property name="mnemonic_widget">bodymle</property>
+                    <property name="xalign">0</property>
                   </object>
                   <packing>
                     <property name="left_attach">0</property>
                     <property name="top_attach">0</property>
-                    <property name="width">1</property>
-                    <property name="height">1</property>
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkTextView" id="bodymle: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>
+                    <property name="hscrollbar_policy">always</property>
+                    <property name="vscrollbar_policy">always</property>
+                    <property name="shadow_type">in</property>
+                    <child>
+                      <object class="GtkTextView" id="bodymle">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="hexpand">True</property>
+                        <property name="vexpand">True</property>
+                        <property name="accepts_tab">False</property>
+                      </object>
+                    </child>
                   </object>
                   <packing>
                     <property name="left_attach">0</property>
                     <property name="top_attach">1</property>
-                    <property name="width">1</property>
-                    <property name="height">1</property>
                   </packing>
                 </child>
               </object>
               <packing>
                 <property name="left_attach">0</property>
                 <property name="top_attach">1</property>
-                <property name="width">1</property>
-                <property name="height">1</property>
               </packing>
             </child>
             <child>
@@ -130,7 +139,6 @@
                 <child>
                   <object class="GtkCheckButton" id="greeting">
                     <property name="label" translatable="yes" context="mmmailbody|greeting">This e-mail should contain a salutation</property>
-                    <property name="use_action_appearance">False</property>
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
                     <property name="receives_default">False</property>
@@ -141,8 +149,6 @@
                   <packing>
                     <property name="left_attach">0</property>
                     <property name="top_attach">0</property>
-                    <property name="width">1</property>
-                    <property name="height">1</property>
                   </packing>
                 </child>
                 <child>
@@ -161,16 +167,14 @@
                           <object class="GtkLabel" id="generalft">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
-                            <property name="xalign">0</property>
                             <property name="label" translatable="yes" context="mmmailbody|generalft">General salutation</property>
                             <property name="use_underline">True</property>
                             <property name="mnemonic_widget">general</property>
+                            <property name="xalign">0</property>
                           </object>
                           <packing>
                             <property name="left_attach">0</property>
                             <property name="top_attach">1</property>
-                            <property name="width">1</property>
-                            <property name="height">1</property>
                           </packing>
                         </child>
                         <child>
@@ -188,8 +192,6 @@
                           <packing>
                             <property name="left_attach">0</property>
                             <property name="top_attach">2</property>
-                            <property name="width">1</property>
-                            <property name="height">1</property>
                           </packing>
                         </child>
                         <child>
@@ -216,82 +218,72 @@
                                       <object class="GtkLabel" id="femalefi">
                                         <property name="visible">True</property>
                                         <property name="can_focus">False</property>
-                                        <property name="xalign">0</property>
                                         <property name="label" translatable="yes" context="mmmailbody|femalefi">Address list field indicating a female recipient</property>
+                                        <property name="xalign">0</property>
                                       </object>
                                       <packing>
                                         <property name="left_attach">0</property>
                                         <property name="top_attach">2</property>
                                         <property name="width">3</property>
-                                        <property name="height">1</property>
                                       </packing>
                                     </child>
                                     <child>
                                       <object class="GtkLabel" id="femaleft">
                                         <property name="visible">True</property>
                                         <property name="can_focus">False</property>
-                                        <property name="xalign">0</property>
                                         <property name="label" translatable="yes" context="mmmailbody|femaleft">_Female</property>
                                         <property name="use_underline">True</property>
                                         <property name="mnemonic_widget">female</property>
+                                        <property name="xalign">0</property>
                                       </object>
                                       <packing>
                                         <property name="left_attach">0</property>
                                         <property name="top_attach">0</property>
-                                        <property name="width">1</property>
-                                        <property name="height">1</property>
                                       </packing>
                                     </child>
                                     <child>
                                       <object class="GtkLabel" id="maleft">
                                         <property name="visible">True</property>
                                         <property name="can_focus">False</property>
-                                        <property name="xalign">0</property>
                                         <property name="label" translatable="yes" context="mmmailbody|maleft">_Male</property>
                                         <property name="use_underline">True</property>
                                         <property name="mnemonic_widget">male</property>
+                                        <property name="xalign">0</property>
                                       </object>
                                       <packing>
                                         <property name="left_attach">0</property>
                                         <property name="top_attach">1</property>
-                                        <property name="width">1</property>
-                                        <property name="height">1</property>
                                       </packing>
                                     </child>
                                     <child>
                                       <object class="GtkLabel" id="femalecolft">
                                         <property name="visible">True</property>
                                         <property name="can_focus">False</property>
-                                        <property name="xalign">0</property>
                                         <property name="label" translatable="yes" context="mmmailbody|femalecolft">Field name</property>
                                         <property name="use_underline">True</property>
+                                        <property name="xalign">0</property>
                                       </object>
                                       <packing>
                                         <property name="left_attach">0</property>
                                         <property name="top_attach">3</property>
-                                        <property name="width">1</property>
-                                        <property name="height">1</property>
                                       </packing>
                                     </child>
                                     <child>
                                       <object class="GtkLabel" id="femalefieldft">
                                         <property name="visible">True</property>
                                         <property name="can_focus">False</property>
-                                        <property name="xalign">0</property>
                                         <property name="label" translatable="yes" context="mmmailbody|femalefieldft">Field value</property>
                                         <property name="use_underline">True</property>
+                                        <property name="xalign">0</property>
                                       </object>
                                       <packing>
                                         <property name="left_attach">0</property>
                                         <property name="top_attach">4</property>
-                                        <property name="width">1</property>
-                                        <property name="height">1</property>
                                       </packing>
                                     </child>
                                     <child>
                                       <object class="GtkButton" id="newfemale">
                                         <property name="label" translatable="yes" context="mmmailbody|newfemale">_New...</property>
-                                        <property name="use_action_appearance">False</property>
                                         <property name="visible">True</property>
                                         <property name="can_focus">True</property>
                                         <property name="receives_default">True</property>
@@ -301,14 +293,11 @@
                                       <packing>
                                         <property name="left_attach">2</property>
                                         <property name="top_attach">0</property>
-                                        <property name="width">1</property>
-                                        <property name="height">1</property>
                                       </packing>
                                     </child>
                                     <child>
                                       <object class="GtkButton" id="newmale">
                                         <property name="label" translatable="yes" context="mmmailbody|newmale">N_ew...</property>
-                                        <property name="use_action_appearance">False</property>
                                         <property name="visible">True</property>
                                         <property name="can_focus">True</property>
                                         <property name="receives_default">True</property>
@@ -318,8 +307,6 @@
                                       <packing>
                                         <property name="left_attach">2</property>
                                         <property name="top_attach">1</property>
-                                        <property name="width">1</property>
-                                        <property name="height">1</property>
                                       </packing>
                                     </child>
                                     <child>
@@ -332,8 +319,6 @@
                                       <packing>
                                         <property name="left_attach">1</property>
                                         <property name="top_attach">0</property>
-                                        <property name="width">1</property>
-                                        <property name="height">1</property>
                                       </packing>
                                     </child>
                                     <child>
@@ -346,8 +331,6 @@
                                       <packing>
                                         <property name="left_attach">1</property>
                                         <property name="top_attach">1</property>
-                                        <property name="width">1</property>
-                                        <property name="height">1</property>
                                       </packing>
                                     </child>
                                     <child>
@@ -360,8 +343,6 @@
                                       <packing>
                                         <property name="left_attach">1</property>
                                         <property name="top_attach">3</property>
-                                        <property name="width">1</property>
-                                        <property name="height">1</property>
                                       </packing>
                                     </child>
                                     <child>
@@ -380,8 +361,6 @@
                                       <packing>
                                         <property name="left_attach">1</property>
                                         <property name="top_attach">4</property>
-                                        <property name="width">1</property>
-                                        <property name="height">1</property>
                                       </packing>
                                     </child>
                                     <child>
@@ -396,14 +375,11 @@
                               <packing>
                                 <property name="left_attach">0</property>
                                 <property name="top_attach">1</property>
-                                <property name="width">1</property>
-                                <property name="height">1</property>
                               </packing>
                             </child>
                             <child>
                               <object class="GtkCheckButton" id="personalized">
                                 <property name="label" translatable="yes" context="mmmailbody|personalized">Insert personalized salutation</property>
-                                <property name="use_action_appearance">False</property>
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
@@ -414,16 +390,12 @@
                               <packing>
                                 <property name="left_attach">0</property>
                                 <property name="top_attach">0</property>
-                                <property name="width">1</property>
-                                <property name="height">1</property>
                               </packing>
                             </child>
                           </object>
                           <packing>
                             <property name="left_attach">0</property>
                             <property name="top_attach">0</property>
-                            <property name="width">1</property>
-                            <property name="height">1</property>
                           </packing>
                         </child>
                       </object>
@@ -432,16 +404,12 @@
                   <packing>
                     <property name="left_attach">0</property>
                     <property name="top_attach">1</property>
-                    <property name="width">1</property>
-                    <property name="height">1</property>
                   </packing>
                 </child>
               </object>
               <packing>
                 <property name="left_attach">0</property>
                 <property name="top_attach">0</property>
-                <property name="width">1</property>
-                <property name="height">1</property>
               </packing>
             </child>
           </object>
diff --git a/sw/uiconfig/swriter/ui/mmsalutationpage.ui b/sw/uiconfig/swriter/ui/mmsalutationpage.ui
index ee5ff2a47771..d2c33bdfd286 100644
--- a/sw/uiconfig/swriter/ui/mmsalutationpage.ui
+++ b/sw/uiconfig/swriter/ui/mmsalutationpage.ui
@@ -1,8 +1,19 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.16.1 -->
+<!-- Generated with glade 3.22.1 -->
 <interface domain="sw">
   <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>
+    <property name="stock">gtk-media-previous</property>
+    <property name="icon_size">1</property>
+  </object>
+  <object class="GtkImage" id="image2">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-media-next</property>
+    <property name="icon_size">1</property>
+  </object>
   <object class="GtkBox" id="MMSalutationPage">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
@@ -45,16 +56,14 @@
                       <object class="GtkLabel" id="previewft">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="xalign">0</property>
                         <property name="label" translatable="yes" context="mmsalutationpage|previewft">Preview</property>
                         <property name="use_underline">True</property>
-                        <property name="mnemonic_widget">preview:border</property>
+                        <property name="mnemonic_widget">preview</property>
+                        <property name="xalign">0</property>
                       </object>
                       <packing>
                         <property name="left_attach">0</property>
                         <property name="top_attach">0</property>
-                        <property name="width">1</property>
-                        <property name="height">1</property>
                       </packing>
                     </child>
                     <child>
@@ -77,22 +86,35 @@
                           <packing>
                             <property name="left_attach">1</property>
                             <property name="top_attach">0</property>
-                            <property name="width">1</property>
                             <property name="height">2</property>
                           </packing>
                         </child>
                         <child>
-                          <object class="swlo-SwAddressPreview" id="preview:border">
+                          <object class="GtkScrolledWindow" id="previewwin">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
                             <property name="hexpand">True</property>
                             <property name="vexpand">True</property>
+                            <property name="hscrollbar_policy">never</property>
+                            <property name="shadow_type">in</property>
+                            <child>
+                              <object class="GtkViewport">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <child>
+                                  <object class="GtkDrawingArea" id="preview">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="hexpand">True</property>
+                                    <property name="vexpand">True</property>
+                                  </object>
+                                </child>
+                              </object>
+                            </child>
                           </object>
                           <packing>
                             <property name="left_attach">0</property>
                             <property name="top_attach">0</property>
-                            <property name="width">1</property>
-                            <property name="height">1</property>
                           </packing>
                         </child>
                         <child>
@@ -111,8 +133,6 @@
                               <packing>
                                 <property name="left_attach">1</property>
                                 <property name="top_attach">0</property>
-                                <property name="width">1</property>
-                                <property name="height">1</property>
                               </packing>
                             </child>
                             <child>
@@ -126,8 +146,6 @@
                               <packing>
                                 <property name="left_attach">2</property>
                                 <property name="top_attach">0</property>
-                                <property name="width">1</property>
-                                <property name="height">1</property>
                               </packing>
                             </child>
                             <child>
@@ -135,38 +153,30 @@
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
                                 <property name="hexpand">True</property>
-                                <property name="xalign">1</property>
                                 <property name="label" translatable="yes" context="mmsalutationpage|documentindex">Document: %1</property>
+                                <property name="xalign">1</property>
                               </object>
                               <packing>
                                 <property name="left_attach">0</property>
                                 <property name="top_attach">0</property>
-                                <property name="width">1</property>
-                                <property name="height">1</property>
                               </packing>
                             </child>
                           </object>
                           <packing>
                             <property name="left_attach">0</property>
                             <property name="top_attach">1</property>
-                            <property name="width">1</property>
-                            <property name="height">1</property>
                           </packing>
                         </child>
                       </object>
                       <packing>
                         <property name="left_attach">0</property>
                         <property name="top_attach">1</property>
-                        <property name="width">1</property>
-                        <property name="height">1</property>
                       </packing>
                     </child>
                   </object>
                   <packing>
                     <property name="left_attach">0</property>
                     <property name="top_attach">1</property>
-                    <property name="width">1</property>
-                    <property name="height">1</property>
                   </packing>
                 </child>
                 <child>
@@ -188,8 +198,6 @@
                       <packing>
                         <property name="left_attach">0</property>
                         <property name="top_attach">0</property>
-                        <property name="width">1</property>
-                        <property name="height">1</property>
                       </packing>
                     </child>
                     <child>
@@ -208,16 +216,14 @@
                               <object class="GtkLabel" id="generalft">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="xalign">0</property>
                                 <property name="label" translatable="yes" context="mmsalutationpage|generalft">General salutation</property>
                                 <property name="use_underline">True</property>
                                 <property name="mnemonic_widget">general</property>
+                                <property name="xalign">0</property>
                               </object>
                               <packing>
                                 <property name="left_attach">0</property>
                                 <property name="top_attach">1</property>
-                                <property name="width">1</property>
-                                <property name="height">1</property>
                               </packing>
                             </child>
                             <child>
@@ -235,8 +241,6 @@
                               <packing>
                                 <property name="left_attach">0</property>
                                 <property name="top_attach">2</property>
-                                <property name="width">1</property>
-                                <property name="height">1</property>
                               </packing>
                             </child>
                             <child>
@@ -263,78 +267,69 @@
                                           <object class="GtkLabel" id="femalefi">
                                             <property name="visible">True</property>
                                             <property name="can_focus">False</property>
-                                            <property name="xalign">0</property>
                                             <property name="label" translatable="yes" context="mmsalutationpage|femalefi">Address list field indicating a female recipient</property>
+                                            <property name="xalign">0</property>
                                           </object>
                                           <packing>
                                             <property name="left_attach">0</property>
                                             <property name="top_attach">2</property>
                                             <property name="width">3</property>
-                                            <property name="height">1</property>
                                           </packing>
                                         </child>
                                         <child>
                                           <object class="GtkLabel" id="femaleft">
                                             <property name="visible">True</property>
                                             <property name="can_focus">False</property>
-                                            <property name="xalign">0</property>
                                             <property name="label" translatable="yes" context="mmsalutationpage|femaleft">_Female</property>
                                             <property name="use_underline">True</property>
                                             <property name="mnemonic_widget">female</property>
+                                            <property name="xalign">0</property>
                                           </object>
                                           <packing>
                                             <property name="left_attach">0</property>
                                             <property name="top_attach">0</property>
-                                            <property name="width">1</property>
-                                            <property name="height">1</property>
                                           </packing>
                                         </child>
                                         <child>
                                           <object class="GtkLabel" id="maleft">
                                             <property name="visible">True</property>
                                             <property name="can_focus">False</property>
-                                            <property name="xalign">0</property>
                                             <property name="label" translatable="yes" context="mmsalutationpage|maleft">_Male</property>
                                             <property name="use_underline">True</property>
                                             <property name="mnemonic_widget">male</property>
+                                            <property name="xalign">0</property>
                                           </object>
                                           <packing>
                                             <property name="left_attach">0</property>
                                             <property name="top_attach">1</property>
-                                            <property name="width">1</property>
-                                            <property name="height">1</property>
                                           </packing>
                                         </child>
                                         <child>
                                           <object class="GtkLabel" id="femalecolft">
                                             <property name="visible">True</property>
                                             <property name="can_focus">False</property>
-                                            <property name="xalign">0</property>
                                             <property name="label" translatable="yes" context="mmsalutationpage|femalecolft">Field name</property>
                                             <property name="use_underline">True</property>
                                             <property name="mnemonic_widget">femalecol</property>
+                                            <property name="xalign">0</property>
                                           </object>
                                           <packing>
                                             <property name="left_attach">0</property>
                                             <property name="top_attach">3</property>
-                                            <property name="width">1</property>
-                                            <property name="height">1</property>
                                           </packing>
                                         </child>
                                         <child>
                                           <object class="GtkLabel" id="femalefieldft">
                                             <property name="visible">True</property>
                                             <property name="can_focus">False</property>
-                                            <property name="xalign">0</property>
                                             <property name="label" translatable="yes" context="mmsalutationpage|femalefieldft">Field value</property>
                                             <property name="use_underline">True</property>
                                             <property name="mnemonic_widget">femalefield</property>
+                                            <property name="xalign">0</property>
                                           </object>
                                           <packing>
                                             <property name="left_attach">0</property>
                                             <property name="top_attach">4</property>
-                                            <property name="width">1</property>
-                                            <property name="height">1</property>
                                           </packing>
                                         </child>
                                         <child>
@@ -349,8 +344,6 @@
                                           <packing>
                                             <property name="left_attach">2</property>
                                             <property name="top_attach">0</property>
-                                            <property name="width">1</property>
-                                            <property name="height">1</property>
                                           </packing>
                                         </child>
                                         <child>
@@ -365,8 +358,6 @@
                                           <packing>
                                             <property name="left_attach">2</property>
                                             <property name="top_attach">1</property>
-                                            <property name="width">1</property>
-                                            <property name="height">1</property>
                                           </packing>
                                         </child>
                                         <child>
@@ -379,8 +370,6 @@
                                           <packing>
                                             <property name="left_attach">1</property>
                                             <property name="top_attach">0</property>
-                                            <property name="width">1</property>
-                                            <property name="height">1</property>
                                           </packing>
                                         </child>
                                         <child>
@@ -393,8 +382,6 @@
                                           <packing>
                                             <property name="left_attach">1</property>
                                             <property name="top_attach">1</property>
-                                            <property name="width">1</property>
-                                            <property name="height">1</property>
                                           </packing>
                                         </child>
                                         <child>
@@ -407,8 +394,6 @@
                                           <packing>
                                             <property name="left_attach">1</property>
                                             <property name="top_attach">3</property>
-                                            <property name="width">1</property>
-                                            <property name="height">1</property>
                                           </packing>
                                         </child>
                                         <child>
@@ -427,8 +412,6 @@
                                           <packing>
                                             <property name="left_attach">1</property>
                                             <property name="top_attach">4</property>
-                                            <property name="width">1</property>
-                                            <property name="height">1</property>
                                           </packing>
                                         </child>
                                         <child>
@@ -443,8 +426,6 @@
                                   <packing>
                                     <property name="left_attach">0</property>
                                     <property name="top_attach">1</property>
-                                    <property name="width">1</property>
-                                    <property name="height">1</property>
                                   </packing>
                                 </child>
                                 <child>
@@ -460,16 +441,12 @@
                                   <packing>
                                     <property name="left_attach">0</property>
                                     <property name="top_attach">0</property>
-                                    <property name="width">1</property>
-                                    <property name="height">1</property>
                                   </packing>
                                 </child>
                               </object>
                               <packing>
                                 <property name="left_attach">0</property>
                                 <property name="top_attach">0</property>
-                                <property name="width">1</property>
-                                <property name="height">1</property>
                               </packing>
                             </child>
                           </object>
@@ -478,16 +455,12 @@
                       <packing>
                         <property name="left_attach">0</property>
                         <property name="top_attach">1</property>
-                        <property name="width">1</property>
-                        <property name="height">1</property>
                       </packing>
                     </child>
                   </object>
                   <packing>
                     <property name="left_attach">0</property>
                     <property name="top_attach">0</property>
-                    <property name="width">1</property>
-                    <property name="height">1</property>
                   </packing>
                 </child>
               </object>
@@ -519,16 +492,4 @@
       <widget name="newmale"/>
     </widgets>
   </object>
-  <object class="GtkImage" id="image1">
-    <property name="visible">True</property>
-    <property name="can_focus">False</property>
-    <property name="stock">gtk-media-previous</property>
-    <property name="icon_size">1</property>
-  </object>
-  <object class="GtkImage" id="image2">
-    <property name="visible">True</property>
-    <property name="can_focus">False</property>
-    <property name="stock">gtk-media-next</property>
-    <property name="icon_size">1</property>
-  </object>
 </interface>


More information about the Libreoffice-commits mailing list