[Libreoffice-commits] core.git: extras/source sw/source sw/uiconfig sw/UIConfig_swriter.mk
Caolán McNamara (via logerrit)
logerrit at kemper.freedesktop.org
Mon Apr 1 13:45:30 UTC 2019
extras/source/glade/libreoffice-catalog.xml.in | 3
sw/UIConfig_swriter.mk | 1
sw/source/ui/dbui/createaddresslistdialog.cxx | 1
sw/source/ui/dbui/mmaddressblockpage.cxx | 465 +++++++------------------
sw/source/ui/dbui/mmaddressblockpage.hxx | 32 +
sw/source/ui/dbui/mmgreetingspage.cxx | 5
sw/uiconfig/swriter/ui/assignfieldsdialog.ui | 159 ++++++++
sw/uiconfig/swriter/ui/assignfragment.ui | 22 +
8 files changed, 339 insertions(+), 349 deletions(-)
New commits:
commit e6f7e778aa0a91e567e6f7d19fecf4af6b8d089f
Author: Caolán McNamara <caolanm at redhat.com>
AuthorDate: Thu Mar 28 21:25:30 2019 +0000
Commit: Caolán McNamara <caolanm at redhat.com>
CommitDate: Mon Apr 1 15:45:07 2019 +0200
weld SwAssignFieldsDialog
Change-Id: I1242f89b4a2809c730b9bc7c2b6b7207edabd47f
Reviewed-on: https://gerrit.libreoffice.org/70015
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
Tested-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/extras/source/glade/libreoffice-catalog.xml.in b/extras/source/glade/libreoffice-catalog.xml.in
index 57106338489d..f89e0d3ddbcd 100644
--- a/extras/source/glade/libreoffice-catalog.xml.in
+++ b/extras/source/glade/libreoffice-catalog.xml.in
@@ -203,9 +203,6 @@
<glade-widget-class title="Address Preview" name="swlo-SwAddressPreview"
generic-name="Address Preview" parent="GtkDrawingArea"
icon-name="widget-gtk-drawingarea"/>
- <glade-widget-class title="Assign Fields Control" name="swuilo-SwAssignFieldsControl"
- generic-name="Assign Fields Control" parent="GtkDrawingArea"
- icon-name="widget-gtk-drawingarea"/>
<glade-widget-class title="Chart Light Button" name="chartcontrollerlo-LightButton"
generic-name="ChartLightButton" parent="GtkButton"
icon-name="widget-gtk-button"/>
diff --git a/sw/UIConfig_swriter.mk b/sw/UIConfig_swriter.mk
index b285bc0dc4ad..b8fad62dce47 100644
--- a/sw/UIConfig_swriter.mk
+++ b/sw/UIConfig_swriter.mk
@@ -94,6 +94,7 @@ $(eval $(call gb_UIConfig_add_uifiles,modules/swriter,\
sw/uiconfig/swriter/ui/asciifilterdialog \
sw/uiconfig/swriter/ui/asksearchdialog \
sw/uiconfig/swriter/ui/assignfieldsdialog \
+ sw/uiconfig/swriter/ui/assignfragment \
sw/uiconfig/swriter/ui/assignstylesdialog \
sw/uiconfig/swriter/ui/attachnamedialog \
sw/uiconfig/swriter/ui/authenticationsettingsdialog \
diff --git a/sw/source/ui/dbui/createaddresslistdialog.cxx b/sw/source/ui/dbui/createaddresslistdialog.cxx
index 3950bb7952d9..9e9626ae0356 100644
--- a/sw/source/ui/dbui/createaddresslistdialog.cxx
+++ b/sw/source/ui/dbui/createaddresslistdialog.cxx
@@ -54,7 +54,6 @@ using namespace ::com::sun::star::ui::dialogs;
struct SwAddressFragment
{
std::unique_ptr<weld::Builder> m_xBuilder;
- std::unique_ptr<weld::Container> m_xOrigContainer;
std::unique_ptr<weld::Label> m_xLabel;
std::unique_ptr<weld::Entry> m_xEntry;
diff --git a/sw/source/ui/dbui/mmaddressblockpage.cxx b/sw/source/ui/dbui/mmaddressblockpage.cxx
index 4ff0595800aa..b5bec37c60d6 100644
--- a/sw/source/ui/dbui/mmaddressblockpage.cxx
+++ b/sw/source/ui/dbui/mmaddressblockpage.cxx
@@ -51,13 +51,6 @@ using namespace ::com::sun::star::sdb;
using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::sdbcx;
-static void lcl_Move(Control* pCtrl, long nYOffset)
-{
- Point aPos(pCtrl->GetPosPixel());
- aPos.AdjustY(nYOffset );
- pCtrl->SetPosPixel(aPos);
-}
-
SwMailMergeAddressBlockPage::SwMailMergeAddressBlockPage( SwMailMergeWizard* _pParent) :
svt::OWizardPage(_pParent, "MMAddressBlockPage",
"modules/swriter/ui/mmaddressblockpage.ui")
@@ -221,10 +214,8 @@ IMPL_LINK(SwMailMergeAddressBlockPage, AssignHdl_Impl, Button*, pButton, void)
SwMailMergeConfigItem& rConfigItem = m_pWizard->GetConfigItem();
const sal_uInt16 nSel = m_pSettingsWIN->GetSelectedAddress();
const uno::Sequence< OUString> aBlocks = rConfigItem.GetAddressBlocks();
- ScopedVclPtr<SwAssignFieldsDialog> pDlg(
- VclPtr<SwAssignFieldsDialog>::Create(
- pButton, m_pWizard->GetConfigItem(), aBlocks[nSel], true));
- if(RET_OK == pDlg->Execute())
+ SwAssignFieldsDialog aDlg(pButton->GetFrameWeld(), m_pWizard->GetConfigItem(), aBlocks[nSel], true);
+ if(RET_OK == aDlg.run())
{
//preview update
InsertDataHdl_Impl(nullptr);
@@ -789,81 +780,69 @@ OUString SwCustomizeAddressBlockDialog::GetAddress()
return sAddress;
}
-class SwAssignFieldsControl : public Control
+struct SwAssignFragment
{
- friend class SwAssignFieldsDialog;
- VclPtr<ScrollBar> m_aVScroll;
- VclPtr<HeaderBar> m_aHeaderHB;
- VclPtr<Window> m_aWindow;
+ std::unique_ptr<weld::Builder> m_xBuilder;
+ std::unique_ptr<weld::Label> m_xLabel;
+ std::unique_ptr<weld::ComboBox> m_xComboBox;
+ std::unique_ptr<weld::Label> m_xPreview;
- std::vector<VclPtr<FixedText> > m_aFieldNames;
- std::vector<VclPtr<ListBox> > m_aMatches;
- std::vector<VclPtr<FixedText> > m_aPreviews;
+ SwAssignFragment(weld::Container* pGrid, int nLine)
+ : m_xBuilder(Application::CreateBuilder(pGrid, "modules/swriter/ui/assignfragment.ui"))
+ , m_xLabel(m_xBuilder->weld_label("label"))
+ , m_xComboBox(m_xBuilder->weld_combo_box("combobox"))
+ , m_xPreview(m_xBuilder->weld_label("preview"))
+ {
+ m_xLabel->set_grid_left_attach(0);
+ m_xLabel->set_grid_top_attach(nLine);
- SwMailMergeConfigItem* m_rConfigItem;
+ m_xComboBox->set_grid_left_attach(1);
+ m_xComboBox->set_grid_top_attach(nLine);
- Link<LinkParamNone*,void> m_aModifyHdl;
+ m_xPreview->set_grid_left_attach(2);
+ m_xPreview->set_grid_top_attach(nLine);
+ }
+};
- long m_nLBStartTopPos;
- long m_nYOffset;
- long m_nFirstYPos;
+class SwAssignFieldsControl
+{
+ friend class SwAssignFieldsDialog;
+ std::unique_ptr<weld::ScrolledWindow> m_xVScroll;
+ std::unique_ptr<weld::Container> m_xGrid;
- DECL_LINK(ScrollHdl_Impl, ScrollBar*, void);
- DECL_LINK(MatchHdl_Impl, ListBox&, void);
- DECL_LINK(GotFocusHdl_Impl, Control&, void);
+ std::vector<SwAssignFragment> m_aFields;
- virtual bool PreNotify( NotifyEvent& rNEvt ) override;
- virtual void Command( const CommandEvent& rCEvt ) override;
+ SwMailMergeConfigItem* m_rConfigItem;
- void MakeVisible( sal_Int32 nIndex );
-public:
- SwAssignFieldsControl(vcl::Window* pParent, WinBits nBits);
- virtual ~SwAssignFieldsControl() override;
- virtual void dispose() override;
+ Link<LinkParamNone*,void> m_aModifyHdl;
- void Init(SwMailMergeConfigItem& rConfigItem);
- void SetModifyHdl(const Link<LinkParamNone*,void>& rModifyHdl)
- {
- m_aModifyHdl = rModifyHdl;
- m_aModifyHdl.Call(nullptr);
- }
- virtual void Resize() override;
- virtual Size GetOptimalSize() const override;
-};
+ DECL_LINK(MatchHdl_Impl, weld::ComboBox&, void);
+ DECL_LINK(GotFocusHdl_Impl, weld::Widget&, void);
-VCL_BUILDER_FACTORY_ARGS(SwAssignFieldsControl, WB_BORDER)
+ void MakeVisible(const tools::Rectangle & rRect);
+public:
+ SwAssignFieldsControl(std::unique_ptr<weld::ScrolledWindow> xWindow,
+ std::unique_ptr<weld::Container> xGrid);
-SwAssignFieldsControl::SwAssignFieldsControl(vcl::Window* pParent, WinBits nBits) :
- Control(pParent, nBits | WB_DIALOGCONTROL | WB_TABSTOP),
- m_aVScroll(VclPtr<ScrollBar>::Create(this)),
- m_aHeaderHB(VclPtr<HeaderBar>::Create(this, WB_BUTTONSTYLE | WB_BOTTOMBORDER)),
- m_aWindow(VclPtr<vcl::Window>::Create(this, WB_BORDER | WB_DIALOGCONTROL)),
- m_rConfigItem(nullptr),
- m_nLBStartTopPos(0),
- m_nYOffset(0),
- m_nFirstYPos(0)
-{
- long nHBHeight = m_aHeaderHB->CalcWindowSizePixel().Height();
- Size aOutputSize(GetOutputSize());
- m_aVScroll->Show();
- m_aHeaderHB->SetSizePixel(
- Size(aOutputSize.Width(), nHBHeight));
- m_aHeaderHB->Show();
- m_aWindow->SetPosPixel(Point( 0, nHBHeight) );
- m_aWindow->SetSizePixel(Size(aOutputSize.Width() - m_aVScroll->GetSizePixel().Width(), aOutputSize.Height() - nHBHeight));
- m_aWindow->Show();
-}
+ void Init(SwAssignFieldsDialog* pDialog, SwMailMergeConfigItem& rConfigItem);
+ void SetModifyHdl(const Link<LinkParamNone*,void>& rModifyHdl)
+ {
+ m_aModifyHdl = rModifyHdl;
+ m_aModifyHdl.Call(nullptr);
+ }
+};
-Size SwAssignFieldsControl::GetOptimalSize() const
+SwAssignFieldsControl::SwAssignFieldsControl(std::unique_ptr<weld::ScrolledWindow> xWindow,
+ std::unique_ptr<weld::Container> xGrid)
+ : m_xVScroll(std::move(xWindow))
+ , m_xGrid(std::move(xGrid))
+ , m_rConfigItem(nullptr)
{
- return LogicToPixel(Size(248, 120), MapMode(MapUnit::MapAppFont));
}
-void SwAssignFieldsControl::Init(SwMailMergeConfigItem& rConfigItem)
+void SwAssignFieldsControl::Init(SwAssignFieldsDialog* pDialog, SwMailMergeConfigItem& rConfigItem)
{
m_rConfigItem = &rConfigItem;
- Size aOutputSize(GetOutputSize());
- long nHBHeight = m_aHeaderHB->CalcWindowSizePixel().Height();
//get the name of the default headers
const std::vector<std::pair<OUString, int>>& rHeaders = rConfigItem.GetDefaultAddressHeaders();
@@ -880,226 +859,85 @@ void SwAssignFieldsControl::Init(SwMailMergeConfigItem& rConfigItem)
//each position in this sequence matches the position in the header array rHeaders
//if no assignment is available an empty sequence will be returned
uno::Sequence< OUString> aAssignments = rConfigItem.GetColumnAssignment( rConfigItem.GetCurrentDBData() );
- Link<ListBox&,void> aMatchHdl = LINK(this, SwAssignFieldsControl, MatchHdl_Impl);
- Link<Control&,void> aFocusHdl = LINK(this, SwAssignFieldsControl, GotFocusHdl_Impl);
+ Link<weld::ComboBox&,void> aMatchHdl = LINK(this, SwAssignFieldsControl, MatchHdl_Impl);
+ Link<weld::Widget&,void> aFocusHdl = LINK(this, SwAssignFieldsControl, GotFocusHdl_Impl);
+
+ int nLabelWidth(0), nComboBoxWidth(0), nPreviewWidth(0);
//fill the controls
- long nControlWidth = aOutputSize.Width() / 3;
- long nControlHeight = -1;
for (size_t i = 0; i < rHeaders.size(); ++i)
{
+ m_aFields.emplace_back(m_xGrid.get(), i);
+
const OUString rHeader = rHeaders[i].first;
- VclPtr<FixedText> pNewText = VclPtr<FixedText>::Create(m_aWindow.get(), WB_VCENTER);
- pNewText->SetText("<" + rHeader + ">");
- VclPtr<ListBox> pNewLB = VclPtr<ListBox>::Create(m_aWindow.get(), WB_DROPDOWN | WB_VCENTER | WB_TABSTOP);
- pNewText->set_mnemonic_widget(pNewLB);
- pNewLB->InsertEntry(SwResId(SW_STR_NONE));
- pNewLB->SelectEntryPos(0);
- pNewLB->SetDropDownLineCount(5);
-
- if (nControlHeight == -1) //first time
- {
- nControlHeight = std::max(pNewLB->get_preferred_size().Height(),
- pNewText->get_preferred_size().Height());
- }
+ weld::ComboBox& rNewLB = *m_aFields.back().m_xComboBox;
+ rNewLB.append_text(SwResId(SW_STR_NONE));
+ rNewLB.set_active(0);
- for(sal_Int32 nField = 0; nField < aFields.getLength(); ++nField)
- pNewLB->InsertEntry(pFields[nField]);
- VclPtr<FixedText> pNewPreview = VclPtr<FixedText>::Create(m_aWindow.get(), WB_VCENTER);
- pNewText->SetSizePixel(Size(nControlWidth - 6, nControlHeight));
- pNewLB->SetSizePixel(Size(nControlWidth - 6, nControlHeight));
- pNewPreview->SetSizePixel(Size(aOutputSize.Width() - 2 * nControlWidth, nControlHeight));
+ for (sal_Int32 nField = 0; nField < aFields.getLength(); ++nField)
+ rNewLB.append_text(pFields[nField]);
//select the ListBox
//if there is an assignment
if(static_cast<sal_uInt32>(aAssignments.getLength()) > i && !aAssignments[i].isEmpty())
- pNewLB->SelectEntry(aAssignments[i]);
+ rNewLB.set_active_text(aAssignments[i]);
else //otherwise the current column name may match one of the db columns
- pNewLB->SelectEntry(rHeader);
+ rNewLB.set_active_text(rHeader);
+
+ weld::Label& rNewText = *m_aFields.back().m_xLabel;
+ rNewText.set_label("<" + rHeader + ">");
+
+ weld::Label& rNewPreview = *m_aFields.back().m_xPreview;
//then the preview can be filled accordingly
- if(xColAccess.is() && pNewLB->GetSelectedEntryPos() > 0 &&
- xColAccess->hasByName(pNewLB->GetSelectedEntry()))
+ if (xColAccess.is() && rNewLB.get_active() > 0 &&
+ xColAccess->hasByName(rNewLB.get_active_text()))
{
- uno::Any aCol = xColAccess->getByName(pNewLB->GetSelectedEntry());
+ uno::Any aCol = xColAccess->getByName(rNewLB.get_active_text());
uno::Reference< XColumn > xColumn;
aCol >>= xColumn;
if(xColumn.is())
{
try
{
- pNewPreview->SetText(xColumn->getString());
+ rNewPreview.set_label(xColumn->getString());
}
catch (const SQLException&)
{
}
}
}
- if(!i)
- {
- //determine the vertical offset, use the bottom position of the ListBox
- m_nFirstYPos = m_nYOffset = pNewLB->GetPosPixel().Y();
- m_nLBStartTopPos = m_nYOffset;
- m_nYOffset += pNewLB->GetSizePixel().Height() + 6;
- }
-
- long nMove = m_nYOffset * i;
- pNewLB->SetSelectHdl(aMatchHdl);
- pNewLB->SetGetFocusHdl(aFocusHdl);
-
- m_aFieldNames.push_back(pNewText);
- m_aMatches.push_back(pNewLB);
- m_aPreviews.push_back(pNewPreview);
- pNewText->Show();
- pNewText->SetPosPixel(Point(6, nMove));
- pNewLB->Show();
- pNewLB->SetPosPixel(Point(nControlWidth, nMove));
- pNewPreview->Show();
- pNewPreview->SetPosPixel(Point(2 * nControlWidth + 6, nMove));
- }
- m_aVScroll->SetRange(Range(0, rHeaders.size()));
- m_aVScroll->SetPageSize((aOutputSize.Height() - nHBHeight - m_nLBStartTopPos)/ m_nYOffset);
- m_aVScroll->EnableDrag();
- m_aVScroll->SetVisibleSize(m_aVScroll->GetPageSize());
- m_aVScroll->SetScrollHdl(LINK(this, SwAssignFieldsControl, ScrollHdl_Impl));
-
- m_aVScroll->SetPosPixel(Point(aOutputSize.Width() - m_aVScroll->GetSizePixel().Width(), nHBHeight));
- m_aVScroll->SetSizePixel(Size(m_aVScroll->GetSizePixel().Width(), aOutputSize.Height() - nHBHeight));
-}
-
-SwAssignFieldsControl::~SwAssignFieldsControl()
-{
- disposeOnce();
-}
-void SwAssignFieldsControl::dispose()
-{
- for(auto& rFIItem : m_aFieldNames)
- rFIItem.disposeAndClear();
- for(auto& rLBItem : m_aMatches)
- rLBItem.disposeAndClear();
- for(auto& rFIItem : m_aPreviews)
- rFIItem.disposeAndClear();
-
- m_aFieldNames.clear();
- m_aMatches.clear();
- m_aPreviews.clear();
-
- m_aVScroll.disposeAndClear();
- m_aHeaderHB.disposeAndClear();
- m_aWindow.disposeAndClear();
- Control::dispose();
-}
-
-void SwAssignFieldsControl::Resize()
-{
- Window::Resize();
-
- Size aOutputSize = GetOutputSize();
- long nHBHeight = m_aHeaderHB->CalcWindowSizePixel().Height();
-
- m_aWindow->SetSizePixel(Size(aOutputSize.Width() - m_aVScroll->GetSizePixel().Width(), aOutputSize.Height() - nHBHeight));
-
- m_aVScroll->SetPosPixel(Point(aOutputSize.Width() - m_aVScroll->GetSizePixel().Width(), nHBHeight));
- m_aVScroll->SetSizePixel(Size(m_aVScroll->GetSizePixel().Width(), aOutputSize.Height() - nHBHeight));
- if(m_nYOffset)
- m_aVScroll->SetPageSize((aOutputSize.Height() - nHBHeight - m_nLBStartTopPos)/ m_nYOffset);
- m_aVScroll->SetVisibleSize(m_aVScroll->GetPageSize());
- m_aVScroll->DoScroll(0);
-
- sal_Int32 nColWidth = aOutputSize.Width() / 3;
- m_aHeaderHB->SetSizePixel(Size(aOutputSize.Width(), nHBHeight));
- m_aHeaderHB->SetItemSize(1, nColWidth);
- m_aHeaderHB->SetItemSize(2, nColWidth);
- m_aHeaderHB->SetItemSize(3, nColWidth);
-
- if (m_aFieldNames.empty() || m_aMatches.empty())
- return;
-
- long nControlHeight = std::max(m_aFieldNames[0]->get_preferred_size().Height(),
- m_aMatches[0]->get_preferred_size().Height());
-
- for(auto& rFIItem : m_aFieldNames)
- rFIItem->SetSizePixel(Size(nColWidth - 6, nControlHeight));
- for(auto& rLBItem : m_aMatches)
- {
- long nPosY = rLBItem->GetPosPixel().Y();
- rLBItem->SetPosSizePixel(Point(nColWidth, nPosY), Size(nColWidth - 6, nControlHeight));
- }
- for(auto& rFIItem : m_aPreviews)
- {
- long nPosY = rFIItem->GetPosPixel().Y();
- rFIItem->SetPosSizePixel(Point(2 * nColWidth + 6, nPosY), Size(nColWidth, nControlHeight));
- }
-}
-
-void SwAssignFieldsControl::Command( const CommandEvent& rCEvt )
-{
- switch ( rCEvt.GetCommand() )
- {
- case CommandEventId::Wheel:
- case CommandEventId::StartAutoScroll:
- case CommandEventId::AutoScroll:
+ if (i == 0)
{
- const CommandWheelData* pWheelData = rCEvt.GetWheelData();
- if(pWheelData && !pWheelData->IsHorz() && CommandWheelMode::ZOOM != pWheelData->GetMode())
- {
- HandleScrollCommand( rCEvt, nullptr, m_aVScroll.get() );
- }
+ auto nLineHeight = m_xGrid->get_preferred_size().Height();
+ m_xVScroll->set_size_request(m_xVScroll->get_approximate_digit_width() * 65,
+ nLineHeight * 6);
+ nComboBoxWidth = rNewLB.get_preferred_size().Width();
}
- break;
- default:
- Control::Command(rCEvt);
- }
-}
-bool SwAssignFieldsControl::PreNotify( NotifyEvent& rNEvt )
-{
- if(rNEvt.GetType() == MouseNotifyEvent::COMMAND)
- {
- const CommandEvent* pCEvt = rNEvt.GetCommandEvent();
- if( pCEvt->GetCommand() == CommandEventId::Wheel )
- {
- Command(*pCEvt);
- return true;
- }
+ nLabelWidth = std::max<int>(nLabelWidth, rNewText.get_preferred_size().Width());
+ nPreviewWidth = std::max<int>(nPreviewWidth, rNewPreview.get_preferred_size().Width());
+
+ rNewLB.connect_changed(aMatchHdl);
+ rNewLB.connect_focus_in(aFocusHdl);
+ rNewText.show();
+ rNewLB.show();
+ rNewPreview.show();
}
- return Control::PreNotify(rNEvt);
+ pDialog->ConnectSizeGroups(nLabelWidth, nComboBoxWidth, nPreviewWidth);
}
-void SwAssignFieldsControl::MakeVisible( sal_Int32 nIndex )
+void SwAssignFieldsControl::MakeVisible(const tools::Rectangle & rRect)
{
- long nThumb = m_aVScroll->GetThumbPos();
- long nPage = m_aVScroll->GetPageSize();
- if(nThumb > nIndex)
- m_aVScroll->SetThumbPos( nIndex );
- else if( (nThumb + nPage) < nIndex)
- m_aVScroll->SetThumbPos( nIndex - nPage );
- else
- return;
- ScrollHdl_Impl( m_aVScroll.get() );
+ //determine range of visible positions
+ auto nMinVisiblePos = m_xVScroll->vadjustment_get_value();
+ auto nMaxVisiblePos = nMinVisiblePos + m_xVScroll->vadjustment_get_page_size();
+ if (rRect.Top() < nMinVisiblePos || rRect.Bottom() > nMaxVisiblePos)
+ m_xVScroll->vadjustment_set_value(rRect.Top());
}
-IMPL_LINK(SwAssignFieldsControl, ScrollHdl_Impl, ScrollBar*, pScroll, void)
+IMPL_LINK(SwAssignFieldsControl, MatchHdl_Impl, weld::ComboBox&, rBox, void)
{
- long nThumb = pScroll->GetThumbPos();
- // the scrollbar moves on a per line basis
- // the height of a line is stored in m_nYOffset
- // nThumb determines which line has to be set at the top (m_nYOffset)
- // The first line has to be -(nThumb * m_nYOffset) in the negative
- long nMove = m_nFirstYPos - (*m_aMatches.begin())->GetPosPixel().Y() - (nThumb * m_nYOffset);
-
- SetUpdateMode(false);
- for(auto& rFIItem : m_aFieldNames)
- lcl_Move(rFIItem, nMove);
- for(auto& rLBItem : m_aMatches)
- lcl_Move(rLBItem, nMove);
- for(auto& rFIItem : m_aPreviews)
- lcl_Move(rFIItem, nMove);
- SetUpdateMode(true);
-}
-
-IMPL_LINK(SwAssignFieldsControl, MatchHdl_Impl, ListBox&, rBox, void)
-{
- const OUString sColumn = rBox.GetSelectedEntry();
+ const OUString sColumn = rBox.get_active_text();
uno::Reference< XColumnsSupplier > xColsSupp( m_rConfigItem->GetResultSet(), uno::UNO_QUERY);
uno::Reference <XNameAccess> xColAccess = xColsSupp.is() ? xColsSupp->getColumns() : nullptr;
OUString sPreview;
@@ -1119,87 +957,63 @@ IMPL_LINK(SwAssignFieldsControl, MatchHdl_Impl, ListBox&, rBox, void)
}
}
}
- auto aLBIter = std::find(m_aMatches.begin(), m_aMatches.end(), &rBox);
- if(aLBIter != m_aMatches.end())
+ auto aLBIter = std::find_if(m_aFields.begin(), m_aFields.end(), [&rBox](const SwAssignFragment& rFragment){
+ return &rBox == rFragment.m_xComboBox.get(); });
+ if (aLBIter != m_aFields.end())
{
- auto nIndex = static_cast<sal_Int32>(std::distance(m_aMatches.begin(), aLBIter));
- m_aPreviews[nIndex]->SetText(sPreview);
+ auto nIndex = static_cast<sal_Int32>(std::distance(m_aFields.begin(), aLBIter));
+ m_aFields[nIndex].m_xPreview->set_label(sPreview);
}
m_aModifyHdl.Call(nullptr);
}
-IMPL_LINK(SwAssignFieldsControl, GotFocusHdl_Impl, Control&, rControl, void)
+IMPL_LINK(SwAssignFieldsControl, GotFocusHdl_Impl, weld::Widget&, rBox, void)
{
- ListBox* pBox = static_cast<ListBox*>(&rControl);
- if(GetFocusFlags::Tab & pBox->GetGetFocusFlags())
- {
- auto aLBIter = std::find(m_aMatches.begin(), m_aMatches.end(), pBox);
- if(aLBIter != m_aMatches.end())
- {
- auto nIndex = static_cast<sal_Int32>(std::distance(m_aMatches.begin(), aLBIter));
- MakeVisible(nIndex);
- }
- }
+ int x, y, width, height;
+ rBox.get_extents_relative_to(*m_xGrid, x, y, width, height);
+ // the container has a border of 3 in the .ui
+ tools::Rectangle aRect(Point(x - 3, y - 3), Size(width + 6, height + 6));
+ MakeVisible(aRect);
}
SwAssignFieldsDialog::SwAssignFieldsDialog(
- vcl::Window* pParent, SwMailMergeConfigItem& rConfigItem,
+ weld::Window* pParent, SwMailMergeConfigItem& rConfigItem,
const OUString& rPreview,
- bool bIsAddressBlock) :
- SfxModalDialog(pParent, "AssignFieldsDialog", "modules/swriter/ui/assignfieldsdialog.ui"),
- m_sNone(SwResId(SW_STR_NONE)),
- m_rPreviewString(rPreview),
- m_rConfigItem(rConfigItem)
-{
- get(m_pMatchingFI, "MATCHING_LABEL");
- get(m_pPreviewFI, "PREVIEW_LABEL");
- get(m_pOK, "ok");
- get(m_pPreviewWIN, "PREVIEW");
- Size aSize(LogicToPixel(Size(248, 45), MapMode(MapUnit::MapAppFont)));
- m_pPreviewWIN->set_width_request(aSize.Width());
- m_pPreviewWIN->set_height_request(aSize.Height());
- get(m_pFieldsControl, "FIELDS");
- m_pFieldsControl->Init(rConfigItem);
- //resize the HeaderBar
- OUString sAddressElement( SwResId(ST_ADDRESSELEMENT) );
+ bool bIsAddressBlock)
+ : SfxDialogController(pParent, "modules/swriter/ui/assignfieldsdialog.ui", "AssignFieldsDialog")
+ , m_sNone(SwResId(SW_STR_NONE))
+ , m_rPreviewString(rPreview)
+ , m_rConfigItem(rConfigItem)
+ , m_xPreview(new AddressPreview(m_xBuilder->weld_scrolled_window("previewwin")))
+ , m_xMatchingFI(m_xBuilder->weld_label("MATCHING_LABEL"))
+ , m_xAddressTitle(m_xBuilder->weld_label("addresselem"))
+ , m_xMatchTitle(m_xBuilder->weld_label("matchelem"))
+ , m_xPreviewTitle(m_xBuilder->weld_label("previewelem"))
+ , m_xPreviewFI(m_xBuilder->weld_label("PREVIEW_LABEL"))
+ , m_xOK(m_xBuilder->weld_button("ok"))
+ , m_xPreviewWin(new weld::CustomWeld(*m_xBuilder, "PREVIEW", *m_xPreview))
+ , m_xFieldsControl(new SwAssignFieldsControl(m_xBuilder->weld_scrolled_window("scroll"),
+ m_xBuilder->weld_container("FIELDS")))
+{
+ m_xPreviewWin->set_size_request(m_xMatchingFI->get_approximate_digit_width() * 45,
+ m_xMatchingFI->get_text_height() * 5);
+ m_xFieldsControl->Init(this, rConfigItem);
+
const OUString sMatchesTo( SwResId(ST_MATCHESTO) );
- const OUString sPreview( SwResId(ST_PREVIEW) );
- if(!bIsAddressBlock)
+ if (!bIsAddressBlock)
{
- m_pPreviewFI->SetText(SwResId(ST_SALUTATIONPREVIEW));
- m_pMatchingFI->SetText(SwResId(ST_SALUTATIONMATCHING));
- sAddressElement = SwResId(ST_SALUTATIONELEMENT);
+ m_xPreviewFI->set_label(SwResId(ST_SALUTATIONPREVIEW));
+ m_xMatchingFI->set_label(SwResId(ST_SALUTATIONMATCHING));
+ m_xAddressTitle->set_label(SwResId(ST_SALUTATIONELEMENT));
}
- Size aOutputSize(m_pFieldsControl->m_aHeaderHB->GetSizePixel());
- sal_Int32 nFirstWidth;
- sal_Int32 nSecondWidth = nFirstWidth = aOutputSize.Width() / 3;
- const HeaderBarItemBits nHeadBits = HeaderBarItemBits::FIXED| HeaderBarItemBits::FIXEDPOS;
- m_pFieldsControl->m_aHeaderHB->InsertItem( 1, sAddressElement, nFirstWidth, nHeadBits|HeaderBarItemBits::LEFT);
- m_pFieldsControl->m_aHeaderHB->InsertItem( 2, sMatchesTo, nSecondWidth, nHeadBits|HeaderBarItemBits::LEFT);
- m_pFieldsControl->m_aHeaderHB->InsertItem( 3, sPreview,
- aOutputSize.Width() - nFirstWidth - nSecondWidth, nHeadBits|HeaderBarItemBits::LEFT);
-
- m_pFieldsControl->SetModifyHdl(LINK(this, SwAssignFieldsDialog, AssignmentModifyHdl_Impl ));
-
- m_pMatchingFI->SetText(m_pMatchingFI->GetText().replaceAll("%1", sMatchesTo));
-
- m_pOK->SetClickHdl(LINK(this, SwAssignFieldsDialog, OkHdl_Impl));
+ m_xFieldsControl->SetModifyHdl(LINK(this, SwAssignFieldsDialog, AssignmentModifyHdl_Impl ));
+ m_xMatchingFI->set_label(m_xMatchingFI->get_label().replaceAll("%1", sMatchesTo));
+ m_xOK->connect_clicked(LINK(this, SwAssignFieldsDialog, OkHdl_Impl));
}
SwAssignFieldsDialog::~SwAssignFieldsDialog()
{
- disposeOnce();
-}
-
-void SwAssignFieldsDialog::dispose()
-{
- m_pMatchingFI.clear();
- m_pFieldsControl.clear();
- m_pPreviewFI.clear();
- m_pPreviewWIN.clear();
- m_pOK.clear();
- SfxModalDialog::dispose();
}
uno::Sequence< OUString > SwAssignFieldsDialog::CreateAssignments()
@@ -1208,21 +1022,21 @@ uno::Sequence< OUString > SwAssignFieldsDialog::CreateAssignments()
m_rConfigItem.GetDefaultAddressHeaders().size());
OUString* pAssignments = aAssignments.getArray();
sal_Int32 nIndex = 0;
- for(const auto& rLBItem : m_pFieldsControl->m_aMatches)
+ for (const auto& rLBItem : m_xFieldsControl->m_aFields)
{
- const OUString sSelect = rLBItem->GetSelectedEntry();
+ const OUString sSelect = rLBItem.m_xComboBox->get_active_text();
pAssignments[nIndex] = (m_sNone != sSelect) ? sSelect : OUString();
++nIndex;
}
return aAssignments;
}
-IMPL_LINK_NOARG(SwAssignFieldsDialog, OkHdl_Impl, Button*, void)
+IMPL_LINK_NOARG(SwAssignFieldsDialog, OkHdl_Impl, weld::Button&, void)
{
m_rConfigItem.SetColumnAssignment(
m_rConfigItem.GetCurrentDBData(),
CreateAssignments() );
- EndDialog(RET_OK);
+ m_xDialog->response(RET_OK);
}
IMPL_LINK_NOARG(SwAssignFieldsDialog, AssignmentModifyHdl_Impl, LinkParamNone*, void)
@@ -1230,7 +1044,14 @@ IMPL_LINK_NOARG(SwAssignFieldsDialog, AssignmentModifyHdl_Impl, LinkParamNone*,
uno::Sequence< OUString > aAssignments = CreateAssignments();
const OUString sPreview = SwAddressPreview::FillData(
m_rPreviewString, m_rConfigItem, &aAssignments);
- m_pPreviewWIN->SetAddress(sPreview);
+ m_xPreview->SetAddress(sPreview);
+}
+
+void SwAssignFieldsDialog::ConnectSizeGroups(int nLabelWidth, int nComboBoxWidth, int nPreviewWidth)
+{
+ m_xAddressTitle->set_size_request(nLabelWidth, -1);
+ m_xMatchTitle->set_size_request(nComboBoxWidth, -1);
+ m_xPreviewTitle->set_size_request(nPreviewWidth, -1);
}
DDListBox::DDListBox(vcl::Window* pParent, WinBits nStyle)
diff --git a/sw/source/ui/dbui/mmaddressblockpage.hxx b/sw/source/ui/dbui/mmaddressblockpage.hxx
index 4c8560988517..3d33daf8246c 100644
--- a/sw/source/ui/dbui/mmaddressblockpage.hxx
+++ b/sw/source/ui/dbui/mmaddressblockpage.hxx
@@ -243,32 +243,40 @@ public:
};
class SwAssignFieldsControl;
-class SwAssignFieldsDialog : public SfxModalDialog
+class SwAssignFieldsDialog : public SfxDialogController
{
- VclPtr<FixedText> m_pMatchingFI;
- VclPtr<SwAssignFieldsControl> m_pFieldsControl;
-
- VclPtr<FixedText> m_pPreviewFI;
- VclPtr<SwAddressPreview> m_pPreviewWIN;
-
- VclPtr<OKButton> m_pOK;
-
OUString const m_sNone;
OUString const m_rPreviewString;
SwMailMergeConfigItem& m_rConfigItem;
+ std::unique_ptr<AddressPreview> m_xPreview;
+ std::unique_ptr<weld::Label> m_xMatchingFI;
+ std::unique_ptr<weld::Label> m_xAddressTitle;
+ std::unique_ptr<weld::Label> m_xMatchTitle;
+ std::unique_ptr<weld::Label> m_xPreviewTitle;
+ std::unique_ptr<weld::Label> m_xPreviewFI;
+ std::unique_ptr<weld::Button> m_xOK;
+ std::unique_ptr<weld::CustomWeld> m_xPreviewWin;
+ std::unique_ptr<SwAssignFieldsControl> m_xFieldsControl;
+
+ std::unique_ptr<weld::SizeGroup> m_xLabelGroup;
+ std::unique_ptr<weld::SizeGroup> m_xComboGroup;
+ std::unique_ptr<weld::SizeGroup> m_xPreviewGroup;
+
css::uno::Sequence< OUString > CreateAssignments();
- DECL_LINK(OkHdl_Impl, Button*, void);
+ DECL_LINK(OkHdl_Impl, weld::Button&, void);
DECL_LINK(AssignmentModifyHdl_Impl, LinkParamNone*, void);
public:
- SwAssignFieldsDialog(vcl::Window* pParent,
+ SwAssignFieldsDialog(weld::Window* pParent,
SwMailMergeConfigItem& rConfigItem,
const OUString& rPreview,
bool bIsAddressBlock);
+
+ void ConnectSizeGroups(int nLabelWidth, int nComboBoxWidth, int nPreviewWidth);
+
virtual ~SwAssignFieldsDialog() override;
- virtual void dispose() override;
};
#endif
diff --git a/sw/source/ui/dbui/mmgreetingspage.cxx b/sw/source/ui/dbui/mmgreetingspage.cxx
index 2723fb04849e..b017e509893a 100644
--- a/sw/source/ui/dbui/mmgreetingspage.cxx
+++ b/sw/source/ui/dbui/mmgreetingspage.cxx
@@ -109,9 +109,8 @@ void SwGreetingsHandler::UpdatePreview()
IMPL_LINK_NOARG(SwMailMergeGreetingsPage, AssignHdl_Impl, weld::Button&, void)
{
const OUString sPreview(m_xFemaleLB->get_active_text() + "\n" + m_xMaleLB->get_active_text());
- ScopedVclPtr<SwAssignFieldsDialog> pDlg(
- VclPtr<SwAssignFieldsDialog>::Create(nullptr /*TODO*/, m_rConfigItem, sPreview, false));
- if(RET_OK == pDlg->Execute())
+ SwAssignFieldsDialog aDlg(GetFrameWeld(), m_rConfigItem, sPreview, false);
+ if (RET_OK == aDlg.run())
{
UpdatePreview();
m_pWizard->UpdateRoadmap();
diff --git a/sw/uiconfig/swriter/ui/assignfieldsdialog.ui b/sw/uiconfig/swriter/ui/assignfieldsdialog.ui
index 8242e31a37c4..200652fb1110 100644
--- a/sw/uiconfig/swriter/ui/assignfieldsdialog.ui
+++ b/sw/uiconfig/swriter/ui/assignfieldsdialog.ui
@@ -1,13 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.16.1 -->
+<!-- Generated with glade 3.22.1 -->
<interface domain="sw">
- <requires lib="LibreOffice" version="1.0"/>
<requires lib="gtk+" version="3.18"/>
<object class="GtkDialog" id="AssignFieldsDialog">
<property name="can_focus">False</property>
<property name="border_width">6</property>
<property name="title" translatable="yes" context="assignfieldsdialog|AssignFieldsDialog">Match Fields</property>
+ <property name="modal">True</property>
+ <property name="default_width">0</property>
+ <property name="default_height">0</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>
@@ -22,6 +27,7 @@
<property name="label">gtk-ok</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
+ <property name="can_default">True</property>
<property name="has_default">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
@@ -81,7 +87,7 @@
<property name="halign">start</property>
<property name="label" translatable="yes" context="assignfieldsdialog|MATCHING_LABEL">Assign the fields from your data source to match the address elements.</property>
<property name="use_underline">True</property>
- <property name="mnemonic_widget">FIELDS:border</property>
+ <property name="mnemonic_widget">FIELDS</property>
</object>
<packing>
<property name="expand">False</property>
@@ -90,12 +96,134 @@
</packing>
</child>
<child>
- <object class="swuilo-SwAssignFieldsControl" id="FIELDS:border">
+ <object class="GtkGrid">
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkScrolledWindow" id="scroll">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</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="GtkGrid">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkGrid" id="FIELDS">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="border_width">6</property>
+ <property name="orientation">vertical</property>
+ <property name="row_spacing">6</property>
+ <property name="column_spacing">6</property>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkGrid">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="border_width">6</property>
+ <property name="column_spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="addresselem">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes" context="assignfieldsdialog|ST_ADDRESSELEMENT">Address elements</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="previewelem">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes" context="assignfieldsdialog|ST_PREVIEW">Preview</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="matchelem">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="label" translatable="yes" context="assignfieldsdialog|ST_MATCHESTO">Matches to field</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
</object>
<packing>
- <property name="expand">True</property>
+ <property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
@@ -107,7 +235,7 @@
<property name="halign">start</property>
<property name="label" translatable="yes" context="assignfieldsdialog|PREVIEW_LABEL">Address block preview</property>
<property name="use_underline">True</property>
- <property name="mnemonic_widget">PREVIEW:border</property>
+ <property name="mnemonic_widget">PREVIEW</property>
</object>
<packing>
<property name="expand">False</property>
@@ -116,9 +244,24 @@
</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="can_focus">True</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_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>
+ </object>
+ </child>
+ </object>
+ </child>
</object>
<packing>
<property name="expand">False</property>
diff --git a/sw/uiconfig/swriter/ui/assignfragment.ui b/sw/uiconfig/swriter/ui/assignfragment.ui
new file mode 100644
index 000000000000..08234ea58f99
--- /dev/null
+++ b/sw/uiconfig/swriter/ui/assignfragment.ui
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.22.1 -->
+<interface domain="sw">
+ <requires lib="gtk+" version="3.18"/>
+ <object class="GtkLabel" id="label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">combobox</property>
+ <property name="xalign">0</property>
+ </object>
+ <object class="GtkComboBoxText" id="combobox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ </object>
+ <object class="GtkLabel" id="preview">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ </object>
+</interface>
More information about the Libreoffice-commits
mailing list