summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2019-03-04 17:31:24 +0000
committerCaolán McNamara <caolanm@redhat.com>2019-03-11 10:00:31 +0100
commitccb2b0078f07194befa61f1e3fd88e53ff236871 (patch)
tree0bfe058721741581eb3ef6489737fdbd902f8d04 /vcl
parent96d0cf0d7bccfea0b9d867cf00a17c7a2409aa87 (diff)
weld SvxMenuConfigPage/SvxToolbarConfigPage
Change-Id: I166ac6c0be8461ea38db711796d1e14fc5b78998 Reviewed-on: https://gerrit.libreoffice.org/68889 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl')
-rw-r--r--vcl/inc/salframe.hxx11
-rw-r--r--vcl/inc/treeglue.hxx79
-rw-r--r--vcl/source/app/salvtables.cxx154
-rw-r--r--vcl/source/treelist/treelistbox.cxx2
-rw-r--r--vcl/source/uitest/uiobject.cxx2
-rw-r--r--vcl/source/window/builder.cxx52
-rw-r--r--vcl/unx/gtk3/gtk3gtkinst.cxx205
-rw-r--r--vcl/win/gdi/salprn.cxx2
8 files changed, 373 insertions, 134 deletions
diff --git a/vcl/inc/salframe.hxx b/vcl/inc/salframe.hxx
index 70f06988db4b..b77ceafa8079 100644
--- a/vcl/inc/salframe.hxx
+++ b/vcl/inc/salframe.hxx
@@ -28,7 +28,6 @@
#include <o3tl/typed_flags_set.hxx>
#include <vcl/window.hxx>
-#include <vcl/weld.hxx>
// complete vcl::Window for SalFrame::CallCallback under -fsanitize=function
class AllSettings;
@@ -52,6 +51,15 @@ namespace o3tl {
template<> struct typed_flags<SalFrameToTop> : is_typed_flags<SalFrameToTop, 0x0f> {};
};
+namespace vcl { class KeyCode; }
+
+namespace weld
+{
+ class Window;
+}
+
+enum class FloatWinPopupFlags;
+
// SalFrame styles
enum class SalFrameStyleFlags
{
@@ -81,6 +89,7 @@ enum class SalFrameStyleFlags
// toolwindows should be painted with a smaller decoration
TOOLWINDOW = 0x40000000,
};
+
namespace o3tl {
template<> struct typed_flags<SalFrameStyleFlags> : is_typed_flags<SalFrameStyleFlags, 0x788001ff> {};
};
diff --git a/vcl/inc/treeglue.hxx b/vcl/inc/treeglue.hxx
new file mode 100644
index 000000000000..a314c7099e2a
--- /dev/null
+++ b/vcl/inc/treeglue.hxx
@@ -0,0 +1,79 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <vcl/svtabbx.hxx>
+
+//the default NotifyStartDrag is weird to me, and defaults to enabling all
+//possibilities when drag starts, while restricting it to some subset of
+//the configured drag drop mode would make more sense to me, but I'm not
+//going to change the baseclass
+
+class LclHeaderTabListBox : public SvHeaderTabListBox
+{
+public:
+ LclHeaderTabListBox(vcl::Window* pParent, WinBits nWinStyle)
+ : SvHeaderTabListBox(pParent, nWinStyle)
+ {
+ }
+
+ virtual DragDropMode NotifyStartDrag(TransferDataContainer&, SvTreeListEntry*) override
+ {
+ return GetDragDropMode();
+ }
+};
+
+class LclTabListBox : public SvTabListBox
+{
+ Link<SvTreeListBox*, void> m_aModelChangedHdl;
+
+public:
+ LclTabListBox(vcl::Window* pParent, WinBits nWinStyle)
+ : SvTabListBox(pParent, nWinStyle)
+ {
+ }
+
+ void SetModelChangedHdl(const Link<SvTreeListBox*, void>& rLink) { m_aModelChangedHdl = rLink; }
+
+ virtual DragDropMode NotifyStartDrag(TransferDataContainer&, SvTreeListEntry*) override
+ {
+ return GetDragDropMode();
+ }
+
+ virtual void ModelHasCleared() override
+ {
+ SvTabListBox::ModelHasCleared();
+ m_aModelChangedHdl.Call(this);
+ }
+
+ virtual void ModelHasInserted(SvTreeListEntry* pEntry) override
+ {
+ SvTabListBox::ModelHasInserted(pEntry);
+ m_aModelChangedHdl.Call(this);
+ }
+
+ virtual void ModelHasInsertedTree(SvTreeListEntry* pEntry) override
+ {
+ SvTabListBox::ModelHasInsertedTree(pEntry);
+ m_aModelChangedHdl.Call(this);
+ }
+
+ virtual void ModelHasMoved(SvTreeListEntry* pSource) override
+ {
+ SvTabListBox::ModelHasMoved(pSource);
+ m_aModelChangedHdl.Call(this);
+ }
+
+ virtual void ModelHasRemoved(SvTreeListEntry* pEntry) override
+ {
+ SvTabListBox::ModelHasRemoved(pEntry);
+ m_aModelChangedHdl.Call(this);
+ }
+};
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 392ecb04ba81..3a9d59a8bdb2 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -32,6 +32,7 @@
#include <salmenu.hxx>
#include <svdata.hxx>
#include <messagedialog.hxx>
+#include <treeglue.hxx>
#include <unotools/accessiblerelationsethelper.hxx>
#include <utility>
#include <tools/helpers.hxx>
@@ -477,6 +478,11 @@ public:
m_xWidget->SetQuickHelpText(rTip);
}
+ virtual OUString get_tooltip_text() const override
+ {
+ return m_xWidget->GetQuickHelpText();
+ }
+
virtual void connect_focus_in(const Link<Widget&, void>& rLink) override
{
ensure_event_listener();
@@ -1539,6 +1545,12 @@ public:
pMenu->EnableItem(rIdent, bSensitive);
}
+ virtual void remove_item(const OString& rId) override
+ {
+ PopupMenu* pMenu = m_xMenuButton->GetPopupMenu();
+ pMenu->RemoveItem(pMenu->GetItemPos(pMenu->GetItemId(rId)));
+ }
+
virtual void set_item_active(const OString& rIdent, bool bActive) override
{
PopupMenu* pMenu = m_xMenuButton->GetPopupMenu();
@@ -2187,6 +2199,7 @@ private:
DECL_LINK(EndDragHdl, HeaderBar*, void);
DECL_LINK(HeaderBarClickedHdl, HeaderBar*, void);
DECL_LINK(ToggleHdl, SvLBoxButtonData*, void);
+ DECL_LINK(ModelChangedHdl, SvTreeListBox*, void);
DECL_LINK(VisibleRangeChangedHdl, SvTreeListBox*, void);
DECL_LINK(CompareHdl, const SvSortData&, sal_Int32);
public:
@@ -2203,13 +2216,21 @@ public:
m_xTreeView->SetExpandingHdl(LINK(this, SalInstanceTreeView, ExpandingHdl));
const long aTabPositions[] = { 0 };
m_xTreeView->SetTabs(SAL_N_ELEMENTS(aTabPositions), aTabPositions);
- SvHeaderTabListBox* pHeaderBox = dynamic_cast<SvHeaderTabListBox*>(m_xTreeView.get());
- if (HeaderBar* pHeaderBar = pHeaderBox ? pHeaderBox->GetHeaderBar() : nullptr)
+ LclHeaderTabListBox* pHeaderBox = dynamic_cast<LclHeaderTabListBox*>(m_xTreeView.get());
+
+ if (pHeaderBox)
{
- //make the last entry fill available space
- pHeaderBar->SetItemSize(pHeaderBar->GetItemId(pHeaderBar->GetItemCount() - 1 ), HEADERBAR_FULLSIZE);
- pHeaderBar->SetEndDragHdl(LINK(this, SalInstanceTreeView, EndDragHdl));
- pHeaderBar->SetSelectHdl(LINK(this, SalInstanceTreeView, HeaderBarClickedHdl));
+ if (HeaderBar* pHeaderBar = pHeaderBox->GetHeaderBar())
+ {
+ //make the last entry fill available space
+ pHeaderBar->SetItemSize(pHeaderBar->GetItemId(pHeaderBar->GetItemCount() - 1 ), HEADERBAR_FULLSIZE);
+ pHeaderBar->SetEndDragHdl(LINK(this, SalInstanceTreeView, EndDragHdl));
+ pHeaderBar->SetSelectHdl(LINK(this, SalInstanceTreeView, HeaderBarClickedHdl));
+ }
+ }
+ else
+ {
+ static_cast<LclTabListBox&>(*m_xTreeView).SetModelChangedHdl(LINK(this, SalInstanceTreeView, ModelChangedHdl));
}
m_aCheckButtonData.SetLink(LINK(this, SalInstanceTreeView, ToggleHdl));
m_aRadioButtonData.SetLink(LINK(this, SalInstanceTreeView, ToggleHdl));
@@ -2222,7 +2243,7 @@ public:
for (size_t i = 0; i < rWidths.size(); ++i)
aTabPositions.push_back(aTabPositions[i] + rWidths[i]);
m_xTreeView->SetTabs(aTabPositions.size(), aTabPositions.data(), MapUnit::MapPixel);
- SvHeaderTabListBox* pHeaderBox = dynamic_cast<SvHeaderTabListBox*>(m_xTreeView.get());
+ LclHeaderTabListBox* pHeaderBox = dynamic_cast<LclHeaderTabListBox*>(m_xTreeView.get());
if (HeaderBar* pHeaderBar = pHeaderBox ? pHeaderBox->GetHeaderBar() : nullptr)
{
for (size_t i = 0; i < rWidths.size(); ++i)
@@ -2243,7 +2264,7 @@ public:
virtual OUString get_column_title(int nColumn) const override
{
- SvHeaderTabListBox* pHeaderBox = dynamic_cast<SvHeaderTabListBox*>(m_xTreeView.get());
+ LclHeaderTabListBox* pHeaderBox = dynamic_cast<LclHeaderTabListBox*>(m_xTreeView.get());
if (HeaderBar* pHeaderBar = pHeaderBox ? pHeaderBox->GetHeaderBar() : nullptr)
{
return pHeaderBar->GetItemText(pHeaderBar->GetItemId(nColumn));
@@ -2253,7 +2274,7 @@ public:
virtual void set_column_title(int nColumn, const OUString& rTitle) override
{
- SvHeaderTabListBox* pHeaderBox = dynamic_cast<SvHeaderTabListBox*>(m_xTreeView.get());
+ LclHeaderTabListBox* pHeaderBox = dynamic_cast<LclHeaderTabListBox*>(m_xTreeView.get());
if (HeaderBar* pHeaderBar = pHeaderBox ? pHeaderBox->GetHeaderBar() : nullptr)
{
return pHeaderBar->SetItemText(pHeaderBar->GetItemId(nColumn), rTitle);
@@ -2262,7 +2283,7 @@ public:
virtual void show() override
{
- SvHeaderTabListBox* pHeaderBox = dynamic_cast<SvHeaderTabListBox*>(m_xTreeView.get());
+ LclHeaderTabListBox* pHeaderBox = dynamic_cast<LclHeaderTabListBox*>(m_xTreeView.get());
if (HeaderBar* pHeaderBar = pHeaderBox ? pHeaderBox->GetHeaderBar() : nullptr)
{
pHeaderBar->Show();
@@ -2272,7 +2293,7 @@ public:
virtual void hide() override
{
- SvHeaderTabListBox* pHeaderBox = dynamic_cast<SvHeaderTabListBox*>(m_xTreeView.get());
+ LclHeaderTabListBox* pHeaderBox = dynamic_cast<LclHeaderTabListBox*>(m_xTreeView.get());
if (HeaderBar* pHeaderBar = pHeaderBox ? pHeaderBox->GetHeaderBar() : nullptr)
{
pHeaderBar->Hide();
@@ -2280,11 +2301,12 @@ public:
SalInstanceContainer::hide();
}
- virtual void insert(weld::TreeIter* pParent, int pos, const OUString* pStr, const OUString* pId,
+ virtual void insert(const weld::TreeIter* pParent, int pos, const OUString* pStr, const OUString* pId,
const OUString* pIconName, VirtualDevice* pImageSurface,
const OUString* pExpanderName, bool bChildrenOnDemand, weld::TreeIter* pRet) override
{
- SalInstanceTreeIter* pVclIter = static_cast<SalInstanceTreeIter*>(pParent);
+ disable_notify_events();
+ const SalInstanceTreeIter* pVclIter = static_cast<const SalInstanceTreeIter*>(pParent);
SvTreeListEntry* iter = pVclIter ? pVclIter->iter : nullptr;
auto nInsertPos = pos == -1 ? TREELIST_APPEND : pos;
void* pUserData;
@@ -2329,6 +2351,7 @@ public:
{
m_xTreeView->InsertEntry("<dummy>", pEntry, false, 0, nullptr);
}
+ enable_notify_events();
}
virtual void set_font_color(int pos, const Color& rColor) const override
@@ -2375,10 +2398,20 @@ public:
pModel->Move(pEntry, nullptr, 0);
}
+ virtual void swap(int pos1, int pos2) override
+ {
+ SvTreeList* pModel = m_xTreeView->GetModel();
+ SvTreeListEntry* pEntry1 = pModel->GetEntry(nullptr, pos1);
+ SvTreeListEntry* pEntry2 = pModel->GetEntry(nullptr, pos2);
+ pModel->Move(pEntry1, pEntry2);
+ }
+
virtual void clear() override
{
+ disable_notify_events();
m_xTreeView->Clear();
m_aUserData.clear();
+ enable_notify_events();
}
virtual int n_children() const override
@@ -2579,9 +2612,14 @@ public:
m_xTreeView->ModelHasEntryInvalidated(pEntry);
}
- virtual void set_image(int pos, const OUString& rImage, int col) override
+ void set_image(SvTreeListEntry* pEntry, const Image& rImage, int col)
{
- SvTreeListEntry* pEntry = m_xTreeView->GetEntry(nullptr, pos);
+ if (col == -1)
+ {
+ m_xTreeView->SetExpandedEntryBmp(pEntry, rImage);
+ m_xTreeView->SetCollapsedEntryBmp(pEntry, rImage);
+ return;
+ }
++col; //skip dummy/expander column
@@ -2589,10 +2627,9 @@ public:
for (int i = pEntry->ItemCount(); i < col ; ++i)
pEntry->AddItem(std::make_unique<SvLBoxString>(""));
- Image aImage(createImage(rImage));
if (static_cast<size_t>(col) == pEntry->ItemCount())
{
- pEntry->AddItem(std::make_unique<SvLBoxContextBmp>(aImage, aImage, false));
+ pEntry->AddItem(std::make_unique<SvLBoxContextBmp>(rImage, rImage, false));
SvViewDataEntry* pViewData = m_xTreeView->GetViewDataEntry(pEntry);
m_xTreeView->InitViewData(pViewData, pEntry);
}
@@ -2601,12 +2638,39 @@ public:
assert(col >= 0 && static_cast<size_t>(col) < pEntry->ItemCount());
SvLBoxItem& rItem = pEntry->GetItem(col);
assert(dynamic_cast<SvLBoxContextBmp*>(&rItem));
- static_cast<SvLBoxContextBmp&>(rItem).SetBitmap1(aImage);
- static_cast<SvLBoxContextBmp&>(rItem).SetBitmap2(aImage);
+ static_cast<SvLBoxContextBmp&>(rItem).SetBitmap1(rImage);
+ static_cast<SvLBoxContextBmp&>(rItem).SetBitmap2(rImage);
}
+ m_xTreeView->SetEntryHeight(pEntry);
m_xTreeView->ModelHasEntryInvalidated(pEntry);
+ }
+ virtual void set_image(int pos, const OUString& rImage, int col) override
+ {
+ set_image(m_xTreeView->GetEntry(nullptr, pos), createImage(rImage), col);
+ }
+
+ virtual void set_image(int pos, const css::uno::Reference<css::graphic::XGraphic>& rImage, int col) override
+ {
+ set_image(m_xTreeView->GetEntry(nullptr, pos), Image(rImage), col);
+ }
+
+ virtual void set_image(int pos, VirtualDevice& rImage, int col) override
+ {
+ set_image(m_xTreeView->GetEntry(nullptr, pos), createImage(rImage), col);
+ }
+
+ virtual void set_image(const weld::TreeIter& rIter, const css::uno::Reference<css::graphic::XGraphic>& rImage, int col) override
+ {
+ const SalInstanceTreeIter& rVclIter = static_cast<const SalInstanceTreeIter&>(rIter);
+ set_image(rVclIter.iter, Image(rImage), col);
+ }
+
+ virtual void set_image(const weld::TreeIter& rIter, const OUString& rImage, int col) override
+ {
+ const SalInstanceTreeIter& rVclIter = static_cast<const SalInstanceTreeIter&>(rIter);
+ set_image(rVclIter.iter, createImage(rImage), col);
}
const OUString* getEntryData(int index) const
@@ -2780,16 +2844,16 @@ public:
return m_xTreeView->IsExpanded(rVclIter.iter);
}
- virtual void expand_row(weld::TreeIter& rIter) override
+ virtual void expand_row(const weld::TreeIter& rIter) override
{
- SalInstanceTreeIter& rVclIter = static_cast<SalInstanceTreeIter&>(rIter);
+ const SalInstanceTreeIter& rVclIter = static_cast<const SalInstanceTreeIter&>(rIter);
if (!m_xTreeView->IsExpanded(rVclIter.iter) && signal_expanding(rIter))
m_xTreeView->Expand(rVclIter.iter);
}
- virtual void collapse_row(weld::TreeIter& rIter) override
+ virtual void collapse_row(const weld::TreeIter& rIter) override
{
- SalInstanceTreeIter& rVclIter = static_cast<SalInstanceTreeIter&>(rIter);
+ const SalInstanceTreeIter& rVclIter = static_cast<const SalInstanceTreeIter&>(rIter);
if (m_xTreeView->IsExpanded(rVclIter.iter))
m_xTreeView->Collapse(rVclIter.iter);
}
@@ -2804,9 +2868,9 @@ public:
return SvTabListBox::GetEntryText(rVclIter.iter, col);
}
- virtual void set_text(weld::TreeIter& rIter, const OUString& rText, int col) override
+ virtual void set_text(const weld::TreeIter& rIter, const OUString& rText, int col) override
{
- SalInstanceTreeIter& rVclIter = static_cast<SalInstanceTreeIter&>(rIter);
+ const SalInstanceTreeIter& rVclIter = static_cast<const SalInstanceTreeIter&>(rIter);
set_text(rVclIter.iter, rText, col);
}
@@ -2819,18 +2883,10 @@ public:
return OUString();
}
- virtual void set_id(weld::TreeIter& rIter, const OUString& rId) override
- {
- SalInstanceTreeIter& rVclIter = static_cast<SalInstanceTreeIter&>(rIter);
- set_id(rVclIter.iter, rId);
- }
-
- virtual void set_expander_image(const weld::TreeIter& rIter, const OUString& rImage) override
+ virtual void set_id(const weld::TreeIter& rIter, const OUString& rId) override
{
const SalInstanceTreeIter& rVclIter = static_cast<const SalInstanceTreeIter&>(rIter);
- Image aImage(createImage(rImage));
- m_xTreeView->SetExpandedEntryBmp(rVclIter.iter, aImage);
- m_xTreeView->SetCollapsedEntryBmp(rVclIter.iter, aImage);
+ set_id(rVclIter.iter, rId);
}
virtual void set_selection_mode(SelectionMode eMode) override
@@ -2906,7 +2962,7 @@ public:
if (col == -1)
col = 0;
- SvHeaderTabListBox* pHeaderBox = dynamic_cast<SvHeaderTabListBox*>(m_xTreeView.get());
+ LclHeaderTabListBox* pHeaderBox = dynamic_cast<LclHeaderTabListBox*>(m_xTreeView.get());
if (HeaderBar* pHeaderBar = pHeaderBox ? pHeaderBox->GetHeaderBar() : nullptr)
{
sal_uInt16 nTextId = pHeaderBar->GetItemId(col);
@@ -2929,7 +2985,7 @@ public:
if (col == -1)
col = 0;
- SvHeaderTabListBox* pHeaderBox = dynamic_cast<SvHeaderTabListBox*>(m_xTreeView.get());
+ LclHeaderTabListBox* pHeaderBox = dynamic_cast<LclHeaderTabListBox*>(m_xTreeView.get());
if (HeaderBar* pHeaderBar = pHeaderBox ? pHeaderBox->GetHeaderBar() : nullptr)
{
sal_uInt16 nTextId = pHeaderBar->GetItemId(col);
@@ -2964,11 +3020,18 @@ public:
virtual ~SalInstanceTreeView() override
{
- SvHeaderTabListBox* pHeaderBox = dynamic_cast<SvHeaderTabListBox*>(m_xTreeView.get());
- if (HeaderBar* pHeaderBar = pHeaderBox ? pHeaderBox->GetHeaderBar() : nullptr)
+ LclHeaderTabListBox* pHeaderBox = dynamic_cast<LclHeaderTabListBox*>(m_xTreeView.get());
+ if (pHeaderBox)
{
- pHeaderBar->SetSelectHdl(Link<HeaderBar*, void>());
- pHeaderBar->SetEndDragHdl(Link<HeaderBar*, void>());
+ if (HeaderBar* pHeaderBar = pHeaderBox->GetHeaderBar())
+ {
+ pHeaderBar->SetSelectHdl(Link<HeaderBar*, void>());
+ pHeaderBar->SetEndDragHdl(Link<HeaderBar*, void>());
+ }
+ }
+ else
+ {
+ static_cast<LclTabListBox&>(*m_xTreeView).SetModelChangedHdl(Link<SvTreeListBox*, void>());
}
m_xTreeView->SetExpandingHdl(Link<SvTreeListBox*, bool>());
m_xTreeView->SetDoubleClickHdl(Link<SvTreeListBox*, bool>());
@@ -3018,9 +3081,18 @@ IMPL_LINK(SalInstanceTreeView, CompareHdl, const SvSortData&, rSortData, sal_Int
IMPL_LINK_NOARG(SalInstanceTreeView, VisibleRangeChangedHdl, SvTreeListBox*, void)
{
+ if (notify_events_disabled())
+ return;
signal_visible_range_changed();
}
+IMPL_LINK_NOARG(SalInstanceTreeView, ModelChangedHdl, SvTreeListBox*, void)
+{
+ if (notify_events_disabled())
+ return;
+ signal_model_changed();
+}
+
IMPL_LINK(SalInstanceTreeView, ToggleHdl, SvLBoxButtonData*, pData, void)
{
SvTreeListEntry* pEntry = pData->GetActEntry();
diff --git a/vcl/source/treelist/treelistbox.cxx b/vcl/source/treelist/treelistbox.cxx
index 586b9073c2cb..f24ef9089694 100644
--- a/vcl/source/treelist/treelistbox.cxx
+++ b/vcl/source/treelist/treelistbox.cxx
@@ -3658,7 +3658,7 @@ bool SvTreeListBox::set_property(const OString &rKey, const OUString &rValue)
else if (rKey == "reorderable")
{
if (toBool(rValue))
- SetDragDropMode(DragDropMode::CTRL_MOVE);
+ SetDragDropMode(DragDropMode::CTRL_MOVE | DragDropMode::ENABLE_TOP);
}
else
return Control::set_property(rKey, rValue);
diff --git a/vcl/source/uitest/uiobject.cxx b/vcl/source/uitest/uiobject.cxx
index 37b9636f2906..b8932913cf53 100644
--- a/vcl/source/uitest/uiobject.cxx
+++ b/vcl/source/uitest/uiobject.cxx
@@ -679,7 +679,7 @@ void EditUIObject::execute(const OUString& rAction,
else if (rAction == "CLEAR")
{
mxEdit->SetText("");
- mxEdit->UpdateData();
+ mxEdit->Modify();
bHandled = true;
}
else
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx
index 5969211017fd..9e1e0748d5ef 100644
--- a/vcl/source/window/builder.cxx
+++ b/vcl/source/window/builder.cxx
@@ -59,6 +59,7 @@
#include <desktop/crashreport.hxx>
#include <salinst.hxx>
#include <strings.hrc>
+#include <treeglue.hxx>
#include <tools/svlibrary.h>
#include <tools/diagnose_ex.h>
@@ -1595,42 +1596,6 @@ void VclBuilder::preload()
extern "C" VclBuilder::customMakeWidget lo_get_custom_widget_func(const char* name);
#endif
-namespace
-{
- //the default NotifyStartDrag is weird to me, and defaults to enabling all
- //possibilities when drag starts, while restricting it to some subset of
- //the configured drag drop mode would make more sense to me, but I'm not
- //going to change the baseclass
-
- class LclHeaderTabListBox : public SvHeaderTabListBox
- {
- public:
- LclHeaderTabListBox(vcl::Window* pParent, WinBits nWinStyle)
- : SvHeaderTabListBox(pParent, nWinStyle)
- {
- }
-
- virtual DragDropMode NotifyStartDrag(TransferDataContainer&, SvTreeListEntry*) override
- {
- return GetDragDropMode();
- }
- };
-
- class LclTabListBox : public SvTabListBox
- {
- public:
- LclTabListBox(vcl::Window* pParent, WinBits nWinStyle)
- : SvTabListBox(pParent, nWinStyle)
- {
- }
-
- virtual DragDropMode NotifyStartDrag(TransferDataContainer&, SvTreeListEntry*) override
- {
- return GetDragDropMode();
- }
- };
-}
-
VclPtr<vcl::Window> VclBuilder::makeObject(vcl::Window *pParent, const OString &name, const OString &id,
stringmap &rMap)
{
@@ -1973,7 +1938,7 @@ VclPtr<vcl::Window> VclBuilder::makeObject(vcl::Window *pParent, const OString &
// everything over to SvHeaderTabListBox/SvTabListBox
//c) remove the users of makeSvTabListBox and makeSvTreeListBox
extractModel(id, rMap);
- WinBits nWinStyle = WB_CLIPCHILDREN|WB_LEFT|WB_VCENTER|WB_3DLOOK;
+ WinBits nWinStyle = WB_CLIPCHILDREN|WB_LEFT|WB_VCENTER|WB_3DLOOK|WB_HIDESELECTION;
if (m_bLegacy)
{
OUString sBorder = BuilderUtils::extractCustomProperty(rMap);
@@ -2022,6 +1987,8 @@ VclPtr<vcl::Window> VclBuilder::makeObject(vcl::Window *pParent, const OString &
xWindow = xBox;
xBox->SetNoAutoCurEntry(true);
xBox->SetQuickSearch(true);
+ xBox->SetSpaceBetweenEntries(3);
+ xBox->SetEntryHeight(16);
xBox->SetHighlightRange(); // select over the whole width
}
if (pRealParent != pParent)
@@ -2124,11 +2091,16 @@ VclPtr<vcl::Window> VclBuilder::makeObject(vcl::Window *pParent, const OString &
extractBuffer(id, rMap);
WinBits nWinStyle = WB_CLIPCHILDREN|WB_LEFT|WB_NOHIDESELECTION;
- OUString sBorder = BuilderUtils::extractCustomProperty(rMap);
- if (!sBorder.isEmpty())
- nWinStyle |= WB_BORDER;
+ if (m_bLegacy)
+ {
+ OUString sBorder = BuilderUtils::extractCustomProperty(rMap);
+ if (!sBorder.isEmpty())
+ nWinStyle |= WB_BORDER;
+ }
//VclMultiLineEdit manages its own scrolling,
vcl::Window *pRealParent = prepareWidgetOwnScrolling(pParent, nWinStyle);
+ if (pRealParent != pParent)
+ nWinStyle |= WB_BORDER;
xWindow = VclPtr<VclMultiLineEdit>::Create(pRealParent, nWinStyle);
if (pRealParent != pParent)
cleanupWidgetOwnScrolling(pParent, xWindow, rMap);
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index f64cc790e115..3e17f6e09b27 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -1702,6 +1702,12 @@ public:
gtk_widget_set_tooltip_text(m_pWidget, OUStringToOString(rTip, RTL_TEXTENCODING_UTF8).getStr());
}
+ virtual OUString get_tooltip_text() const override
+ {
+ const gchar* pStr = gtk_widget_get_tooltip_text(m_pWidget);
+ return OUString(pStr, pStr ? strlen(pStr) : 0, RTL_TEXTENCODING_UTF8);
+ }
+
virtual weld::Container* weld_parent() const override;
virtual OString get_buildable_name() const override
@@ -1926,22 +1932,25 @@ namespace
namespace
{
+ GdkPixbuf* load_icon_from_stream(SvMemoryStream& rStream)
+ {
+ GdkPixbufLoader *pixbuf_loader = gdk_pixbuf_loader_new();
+ gdk_pixbuf_loader_write(pixbuf_loader, static_cast<const guchar*>(rStream.GetData()),
+ rStream.TellEnd(), nullptr);
+ gdk_pixbuf_loader_close(pixbuf_loader, nullptr);
+ GdkPixbuf* pixbuf = gdk_pixbuf_loader_get_pixbuf(pixbuf_loader);
+ if (pixbuf)
+ g_object_ref(pixbuf);
+ g_object_unref(pixbuf_loader);
+ return pixbuf;
+ }
+
GdkPixbuf* load_icon_by_name(const OUString& rIconName, const OUString& rIconTheme, const OUString& rUILang)
{
- GdkPixbuf* pixbuf = nullptr;
auto xMemStm = ImageTree::get().getImageStream(rIconName, rIconTheme, rUILang);
- if (xMemStm)
- {
- GdkPixbufLoader *pixbuf_loader = gdk_pixbuf_loader_new();
- gdk_pixbuf_loader_write(pixbuf_loader, static_cast<const guchar*>(xMemStm->GetData()),
- xMemStm->TellEnd(), nullptr);
- gdk_pixbuf_loader_close(pixbuf_loader, nullptr);
- pixbuf = gdk_pixbuf_loader_get_pixbuf(pixbuf_loader);
- if (pixbuf)
- g_object_ref(pixbuf);
- g_object_unref(pixbuf_loader);
- }
- return pixbuf;
+ if (!xMemStm)
+ return nullptr;
+ return load_icon_from_stream(*xMemStm);
}
}
@@ -1954,7 +1963,7 @@ GdkPixbuf* load_icon_by_name(const OUString& rIconName)
namespace
{
- GdkPixbuf* load_icon_from_surface(const VirtualDevice& rDevice)
+ GdkPixbuf* getPixbuf(const VirtualDevice& rDevice)
{
Size aSize(rDevice.GetOutputSizePixel());
cairo_surface_t* surface = get_underlying_cairo_surface(rDevice);
@@ -1985,7 +1994,7 @@ namespace
}
else
{
- GdkPixbuf* pixbuf = load_icon_from_surface(rImageSurface);
+ GdkPixbuf* pixbuf = getPixbuf(rImageSurface);
pImage = gtk_image_new_from_pixbuf(pixbuf);
g_object_unref(pixbuf);
}
@@ -2102,6 +2111,13 @@ public:
gtk_menu_reorder_child(m_pMenu, pItem, pos);
}
+ void remove_item(const OString& rIdent)
+ {
+ GtkMenuItem* pMenuItem = m_aMap[rIdent];
+ remove_from_map(pMenuItem);
+ gtk_widget_destroy(GTK_WIDGET(pMenuItem));
+ }
+
void set_item_sensitive(const OString& rIdent, bool bSensitive)
{
gtk_widget_set_sensitive(GTK_WIDGET(m_aMap[rIdent]), bSensitive);
@@ -4376,7 +4392,7 @@ public:
gtk_image_set_from_surface(m_pImage, get_underlying_cairo_surface(*pDevice));
else
{
- GdkPixbuf* pixbuf = load_icon_from_surface(*pDevice);
+ GdkPixbuf* pixbuf = getPixbuf(*pDevice);
gtk_image_set_from_pixbuf(m_pImage, pixbuf);
g_object_unref(pixbuf);
}
@@ -4391,6 +4407,11 @@ public:
MenuHelper::insert_item(pos, rId, rStr, pIconName, pImageSurface, bCheck);
}
+ virtual void remove_item(const OString& rId) override
+ {
+ MenuHelper::remove_item(rId);
+ }
+
virtual void set_item_active(const OString& rIdent, bool bActive) override
{
MenuHelper::set_item_active(rIdent, bActive);
@@ -5257,6 +5278,17 @@ namespace
return pixbuf;
}
+ GdkPixbuf* getPixbuf(const css::uno::Reference<css::graphic::XGraphic>& rImage)
+ {
+ Image aImage(rImage);
+
+ std::unique_ptr<SvMemoryStream> xMemStm(new SvMemoryStream);
+ vcl::PNGWriter aWriter(aImage.GetBitmapEx());
+ aWriter.Write(*xMemStm);
+
+ return load_icon_from_stream(*xMemStm);
+ }
+
void insert_row(GtkListStore* pListStore, GtkTreeIter& iter, int pos, const OUString* pId, const OUString& rText, const OUString* pIconName, const VirtualDevice* pDevice)
{
if (!pIconName && !pDevice)
@@ -5384,6 +5416,8 @@ private:
gulong m_nRowActivatedSignalId;
gulong m_nTestExpandRowSignalId;
gulong m_nVAdjustmentChangedSignalId;
+ gulong m_nRowDeletedSignalId;
+ gulong m_nRowInsertedSignalId;
DECL_LINK(async_signal_changed, void*, void);
@@ -5406,10 +5440,10 @@ private:
pThis->signal_row_activated();
}
- void insert_row(GtkTreeIter& iter, GtkTreeIter* parent, int pos, const OUString* pId, const OUString* pText,
+ void insert_row(GtkTreeIter& iter, const GtkTreeIter* parent, int pos, const OUString* pId, const OUString* pText,
const OUString* pIconName, const VirtualDevice* pDevice, const OUString* pExpanderName)
{
- gtk_tree_store_insert_with_values(m_pTreeStore, &iter, parent, pos,
+ gtk_tree_store_insert_with_values(m_pTreeStore, &iter, const_cast<GtkTreeIter*>(parent), pos,
m_nTextCol, !pText ? nullptr : OUStringToOString(*pText, RTL_TEXTENCODING_UTF8).getStr(),
m_nIdCol, !pId ? nullptr : OUStringToOString(*pId, RTL_TEXTENCODING_UTF8).getStr(),
-1);
@@ -5480,10 +5514,10 @@ private:
return bRet;
}
- void set(GtkTreeIter& iter, int col, const OUString& rText)
+ void set(const GtkTreeIter& iter, int col, const OUString& rText)
{
OString aStr(OUStringToOString(rText, RTL_TEXTENCODING_UTF8));
- gtk_tree_store_set(m_pTreeStore, &iter, col, aStr.getStr(), -1);
+ gtk_tree_store_set(m_pTreeStore, const_cast<GtkTreeIter*>(&iter), col, aStr.getStr(), -1);
}
void set(int pos, int col, const OUString& rText)
@@ -5608,6 +5642,18 @@ private:
return m_aModelColToViewCol[modelcol];
}
+ static void signalRowDeleted(GtkTreeModel*, GtkTreePath*, GtkTreeIter*, gpointer widget)
+ {
+ GtkInstanceTreeView* pThis = static_cast<GtkInstanceTreeView*>(widget);
+ pThis->signal_model_changed();
+ }
+
+ static void signalRowInserted(GtkTreeModel*, GtkTreePath*, GtkTreeIter*, gpointer widget)
+ {
+ GtkInstanceTreeView* pThis = static_cast<GtkInstanceTreeView*>(widget);
+ pThis->signal_model_changed();
+ }
+
public:
GtkInstanceTreeView(GtkTreeView* pTreeView, GtkInstanceBuilder* pBuilder, bool bTakeOwnership)
: GtkInstanceContainer(GTK_CONTAINER(pTreeView), pBuilder, bTakeOwnership)
@@ -5661,6 +5707,10 @@ public:
{
a.second = nIndex++;
}
+
+ GtkTreeModel *pModel = GTK_TREE_MODEL(m_pTreeStore);
+ m_nRowDeletedSignalId = g_signal_connect(pModel, "row-deleted", G_CALLBACK(signalRowDeleted), this);
+ m_nRowInsertedSignalId = g_signal_connect(pModel, "row-inserted", G_CALLBACK(signalRowInserted), this);
}
virtual void set_column_fixed_widths(const std::vector<int>& rWidths) override
@@ -5698,13 +5748,13 @@ public:
gtk_tree_view_column_set_title(pColumn, OUStringToOString(rTitle, RTL_TEXTENCODING_UTF8).getStr());
}
- virtual void insert(weld::TreeIter* pParent, int pos, const OUString* pText, const OUString* pId, const OUString* pIconName,
+ virtual void insert(const weld::TreeIter* pParent, int pos, const OUString* pText, const OUString* pId, const OUString* pIconName,
VirtualDevice* pImageSurface, const OUString* pExpanderName,
bool bChildrenOnDemand, weld::TreeIter* pRet) override
{
disable_notify_events();
GtkTreeIter iter;
- GtkInstanceTreeIter* pGtkIter = static_cast<GtkInstanceTreeIter*>(pParent);
+ const GtkInstanceTreeIter* pGtkIter = static_cast<const GtkInstanceTreeIter*>(pParent);
insert_row(iter, pGtkIter ? &pGtkIter->iter : nullptr, pos, pId, pText, pIconName, pImageSurface, pExpanderName);
if (bChildrenOnDemand)
{
@@ -5776,6 +5826,23 @@ public:
enable_notify_events();
}
+ virtual void swap(int pos1, int pos2) override
+ {
+ disable_notify_events();
+
+ GtkTreeModel *pModel = GTK_TREE_MODEL(m_pTreeStore);
+
+ GtkTreeIter iter1;
+ gtk_tree_model_iter_nth_child(pModel, &iter1, nullptr, pos1);
+
+ GtkTreeIter iter2;
+ gtk_tree_model_iter_nth_child(pModel, &iter2, nullptr, pos2);
+
+ gtk_tree_store_swap(m_pTreeStore, &iter1, &iter2);
+
+ enable_notify_events();
+ }
+
virtual void clear() override
{
disable_notify_events();
@@ -6023,21 +6090,56 @@ public:
set(pos, col, bSensitive);
}
- virtual void set_image(int pos, const OUString& rImage, int col) override
+ void set_image(const GtkTreeIter& iter, int col, GdkPixbuf* pixbuf)
{
- col = get_model_col(col);
-
- GdkPixbuf* pixbuf = getPixbuf(rImage);
+ gtk_tree_store_set(m_pTreeStore, const_cast<GtkTreeIter*>(&iter), col, pixbuf, -1);
+ if (pixbuf)
+ g_object_unref(pixbuf);
+ }
+ void set_image(int pos, GdkPixbuf* pixbuf, int col)
+ {
GtkTreeModel *pModel = GTK_TREE_MODEL(m_pTreeStore);
GtkTreeIter iter;
if (gtk_tree_model_iter_nth_child(pModel, &iter, nullptr, pos))
{
- gtk_tree_store_set(m_pTreeStore, &iter, col, pixbuf, -1);
+ set_image(iter, col, pixbuf);
}
+ }
- if (pixbuf)
- g_object_unref(pixbuf);
+ virtual void set_image(int pos, const css::uno::Reference<css::graphic::XGraphic>& rImage, int col) override
+ {
+ set_image(pos, getPixbuf(rImage), col);
+ }
+
+ virtual void set_image(int pos, const OUString& rImage, int col) override
+ {
+ set_image(pos, getPixbuf(rImage), col);
+ }
+
+ virtual void set_image(int pos, VirtualDevice& rImage, int col) override
+ {
+ set_image(pos, getPixbuf(rImage), col);
+ }
+
+ virtual void set_image(const weld::TreeIter& rIter, const css::uno::Reference<css::graphic::XGraphic>& rImage, int col) override
+ {
+ const GtkInstanceTreeIter& rGtkIter = static_cast<const GtkInstanceTreeIter&>(rIter);
+ if (col == -1)
+ col = m_nExpanderImageCol;
+ else
+ col = get_model_col(col);
+ set_image(rGtkIter.iter, col, getPixbuf(rImage));
+ }
+
+ virtual void set_image(const weld::TreeIter& rIter, const OUString& rImage, int col) override
+ {
+ const GtkInstanceTreeIter& rGtkIter = static_cast<const GtkInstanceTreeIter&>(rIter);
+ if (col == -1)
+ col = m_nExpanderImageCol;
+ else
+ col = get_model_col(col);
+ set_image(rGtkIter.iter, col, getPixbuf(rImage));
}
virtual OUString get_id(int pos) const override
@@ -6245,21 +6347,21 @@ public:
return ret;
}
- virtual void expand_row(weld::TreeIter& rIter) override
+ virtual void expand_row(const weld::TreeIter& rIter) override
{
- GtkInstanceTreeIter& rGtkIter = static_cast<GtkInstanceTreeIter&>(rIter);
+ const GtkInstanceTreeIter& rGtkIter = static_cast<const GtkInstanceTreeIter&>(rIter);
GtkTreeModel *pModel = GTK_TREE_MODEL(m_pTreeStore);
- GtkTreePath* path = gtk_tree_model_get_path(pModel, &rGtkIter.iter);
+ GtkTreePath* path = gtk_tree_model_get_path(pModel, const_cast<GtkTreeIter*>(&rGtkIter.iter));
if (!gtk_tree_view_row_expanded(m_pTreeView, path))
gtk_tree_view_expand_to_path(m_pTreeView, path);
gtk_tree_path_free(path);
}
- virtual void collapse_row(weld::TreeIter& rIter) override
+ virtual void collapse_row(const weld::TreeIter& rIter) override
{
- GtkInstanceTreeIter& rGtkIter = static_cast<GtkInstanceTreeIter&>(rIter);
+ const GtkInstanceTreeIter& rGtkIter = static_cast<const GtkInstanceTreeIter&>(rIter);
GtkTreeModel *pModel = GTK_TREE_MODEL(m_pTreeStore);
- GtkTreePath* path = gtk_tree_model_get_path(pModel, &rGtkIter.iter);
+ GtkTreePath* path = gtk_tree_model_get_path(pModel, const_cast<GtkTreeIter*>(&rGtkIter.iter));
if (gtk_tree_view_row_expanded(m_pTreeView, path))
gtk_tree_view_collapse_row(m_pTreeView, path);
gtk_tree_path_free(path);
@@ -6275,9 +6377,9 @@ public:
return get(rGtkIter.iter, col);
}
- virtual void set_text(weld::TreeIter& rIter, const OUString& rText, int col) override
+ virtual void set_text(const weld::TreeIter& rIter, const OUString& rText, int col) override
{
- GtkInstanceTreeIter& rGtkIter = static_cast<GtkInstanceTreeIter&>(rIter);
+ const GtkInstanceTreeIter& rGtkIter = static_cast<const GtkInstanceTreeIter&>(rIter);
if (col == -1)
col = m_nTextCol;
else
@@ -6291,21 +6393,10 @@ public:
return get(rGtkIter.iter, m_nIdCol);
}
- virtual void set_id(weld::TreeIter& rIter, const OUString& rId) override
- {
- GtkInstanceTreeIter& rGtkIter = static_cast<GtkInstanceTreeIter&>(rIter);
- set(rGtkIter.iter, m_nIdCol, rId);
- }
-
- virtual void set_expander_image(const weld::TreeIter& rIter, const OUString& rExpanderName) override
+ virtual void set_id(const weld::TreeIter& rIter, const OUString& rId) override
{
const GtkInstanceTreeIter& rGtkIter = static_cast<const GtkInstanceTreeIter&>(rIter);
- disable_notify_events();
- GdkPixbuf* pixbuf = getPixbuf(rExpanderName);
- gtk_tree_store_set(m_pTreeStore, const_cast<GtkTreeIter*>(&rGtkIter.iter), m_nExpanderImageCol, pixbuf, -1);
- if (pixbuf)
- g_object_unref(pixbuf);
- enable_notify_events();
+ set(rGtkIter.iter, m_nIdCol, rId);
}
virtual void freeze() override
@@ -6438,18 +6529,32 @@ public:
{
g_signal_handler_block(gtk_tree_view_get_selection(m_pTreeView), m_nChangedSignalId);
g_signal_handler_block(m_pTreeView, m_nRowActivatedSignalId);
+
+ GtkTreeModel *pModel = GTK_TREE_MODEL(m_pTreeStore);
+ g_signal_handler_block(pModel, m_nRowDeletedSignalId);
+ g_signal_handler_block(pModel, m_nRowInsertedSignalId);
+
GtkInstanceContainer::disable_notify_events();
}
virtual void enable_notify_events() override
{
GtkInstanceContainer::enable_notify_events();
+
+ GtkTreeModel *pModel = GTK_TREE_MODEL(m_pTreeStore);
+ g_signal_handler_unblock(pModel, m_nRowDeletedSignalId);
+ g_signal_handler_unblock(pModel, m_nRowInsertedSignalId);
+
g_signal_handler_unblock(m_pTreeView, m_nRowActivatedSignalId);
g_signal_handler_unblock(gtk_tree_view_get_selection(m_pTreeView), m_nChangedSignalId);
}
virtual ~GtkInstanceTreeView() override
{
+ GtkTreeModel *pModel = GTK_TREE_MODEL(m_pTreeStore);
+ g_signal_handler_disconnect(pModel, m_nRowDeletedSignalId);
+ g_signal_handler_disconnect(pModel, m_nRowInsertedSignalId);
+
if (m_nVAdjustmentChangedSignalId)
{
GtkAdjustment* pVAdjustment = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(m_pTreeView));
diff --git a/vcl/win/gdi/salprn.cxx b/vcl/win/gdi/salprn.cxx
index 9b4085684d81..d702be988ab1 100644
--- a/vcl/win/gdi/salprn.cxx
+++ b/vcl/win/gdi/salprn.cxx
@@ -31,6 +31,8 @@
#include <tools/urlobj.hxx>
+#include <vcl/weld.hxx>
+
#include <win/wincomp.hxx>
#include <win/saldata.hxx>
#include <win/salinst.h>