weld ChineseDictionaryDialog
and ChineseTranslationDialog
Change-Id: I3b754c405c8379fc0c5fa94437cc0464a1dea999
Reviewed-on: https://gerrit.libreoffice.org/67991
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/basctl/source/basicide/bastype2.cxx b/basctl/source/basicide/bastype2.cxx
index 11beb68..a5b0057 100644
--- a/basctl/source/basicide/bastype2.cxx
+++ b/basctl/source/basicide/bastype2.cxx
@@ -1352,7 +1352,7 @@ void SbTreeListBox::AddEntry(
std::unique_ptr<Entry>&& rUserData)
{
OUString sId(OUString::number(reinterpret_cast<sal_uInt64>(rUserData.release())));
m_xControl->insert(pParent, -1, &rText, &sId, nullptr, nullptr, &rImage, bChildrenOnDemand);
m_xControl->insert(pParent, -1, &rText, &sId, nullptr, nullptr, &rImage, bChildrenOnDemand, nullptr);
}
void SbTreeListBox::SetEntryBitmaps(const weld::TreeIter& rIter, const OUString& rImage)
diff --git a/basctl/source/basicide/moduldl2.cxx b/basctl/source/basicide/moduldl2.cxx
index dec80d5..2a5b729 100644
--- a/basctl/source/basicide/moduldl2.cxx
+++ b/basctl/source/basicide/moduldl2.cxx
@@ -808,8 +808,7 @@ void LibPage::InsertLib()
( xDlgLibContImport.is() && xDlgLibContImport->hasByName( aLibName ) && xDlgLibContImport->isLibraryLink( aLibName ) ) ) )
{
weld::TreeView& rView = xLibDlg->GetLibBox();
rView.insert(nullptr, -1, nullptr, nullptr, nullptr,
nullptr, nullptr, false);
rView.append();
const int nRow = rView.n_children() - 1;
rView.set_toggle(nRow, true, 0);
rView.set_text(nRow, aLibName, 1);
diff --git a/basctl/source/dlged/managelang.cxx b/basctl/source/dlged/managelang.cxx
index 6813a96..85797a5 100644
--- a/basctl/source/dlged/managelang.cxx
+++ b/basctl/source/dlged/managelang.cxx
@@ -272,8 +272,7 @@ void SetDefaultLanguageDialog::FillLanguageBox()
for (sal_Int32 j = 0; j < nCountLang; ++j)
{
LanguageType eLang = m_xLanguageCB->get_id(j);
m_xCheckLangLB->insert(nullptr, -1, nullptr, nullptr, nullptr,
nullptr, nullptr, false);
m_xCheckLangLB->append();
const int nRow = m_xCheckLangLB->n_children() - 1;
m_xCheckLangLB->set_toggle(nRow, false, 0);
m_xCheckLangLB->set_text(nRow, m_xLanguageCB->get_text(j), 1);
diff --git a/cui/source/customize/cfgutil.cxx b/cui/source/customize/cfgutil.cxx
index 1436710..012b468 100644
--- a/cui/source/customize/cfgutil.cxx
+++ b/cui/source/customize/cfgutil.cxx
@@ -1383,7 +1383,7 @@ void CuiConfigGroupListBox::FillScriptList(const css::uno::Reference< css::scrip
0, static_cast<void *>( theChild.get())));
OUString sId(OUString::number(reinterpret_cast<sal_Int64>(aArr.back().get())));
m_xTreeView->insert(pParentEntry, -1, &uiName, &sId, nullptr, nullptr, &aImage, bChildOnDemand);
m_xTreeView->insert(pParentEntry, -1, &uiName, &sId, nullptr, nullptr, &aImage, bChildOnDemand, nullptr);
}
}
}
@@ -1453,7 +1453,7 @@ void CuiConfigGroupListBox::Init(const css::uno::Reference< css::uno::XComponent
static_cast<void *>(rootNode.get())));
OUString aTitle(xImp->m_sDlgMacros);
OUString sId(OUString::number(reinterpret_cast<sal_Int64>(aArr.back().get())));
m_xTreeView->insert(nullptr, -1, &aTitle, &sId, nullptr, nullptr, nullptr, true);
m_xTreeView->insert(nullptr, -1, &aTitle, &sId, nullptr, nullptr, nullptr, true, nullptr);
}
else
{
@@ -1469,7 +1469,7 @@ void CuiConfigGroupListBox::Init(const css::uno::Reference< css::uno::XComponent
aArr.push_back( std::make_unique<SfxGroupInfo_Impl>( SfxCfgKind::GROUP_STYLES, 0, nullptr ) ); // TODO last parameter should contain user data
OUString sStyle(xImp->m_aStrGroupStyles);
OUString sId(OUString::number(reinterpret_cast<sal_Int64>(aArr.back().get())));
m_xTreeView->insert(nullptr, -1, &sStyle, &sId, nullptr, nullptr, nullptr, true);
m_xTreeView->insert(nullptr, -1, &sStyle, &sId, nullptr, nullptr, nullptr, true, nullptr);
}
m_xTreeView->thaw();
@@ -1761,7 +1761,7 @@ IMPL_LINK(CuiConfigGroupListBox, ExpandingHdl, weld::TreeIter&, rIter, bool)
SfxStyleInfo_Impl* pFamily = new SfxStyleInfo_Impl(lStyleFamily);
aArr.push_back( std::make_unique<SfxGroupInfo_Impl>( SfxCfgKind::GROUP_STYLES, 0, pFamily ));
OUString sId(OUString::number(reinterpret_cast<sal_Int64>(aArr.back().get())));
m_xTreeView->insert(&rIter, -1, &pFamily->sLabel, &sId, nullptr, nullptr, nullptr, false);
m_xTreeView->insert(&rIter, -1, &pFamily->sLabel, &sId, nullptr, nullptr, nullptr, false, nullptr);
}
}
break;
diff --git a/cui/source/dialogs/hangulhanjadlg.cxx b/cui/source/dialogs/hangulhanjadlg.cxx
index 74f46d3..01cc5ad 100644
--- a/cui/source/dialogs/hangulhanjadlg.cxx
+++ b/cui/source/dialogs/hangulhanjadlg.cxx
@@ -960,6 +960,8 @@ namespace svx
}
}
}
if (m_xDictsLB->n_children())
m_xDictsLB->select(0);
}
IMPL_LINK_NOARG(HangulHanjaOptionsDialog, OkHdl, weld::Button&, void)
@@ -1142,8 +1144,7 @@ namespace svx
void HangulHanjaOptionsDialog::AddDict(const OUString& rName, bool bChecked)
{
m_xDictsLB->insert(nullptr, -1, nullptr, nullptr,
nullptr, nullptr, nullptr, false);
m_xDictsLB->append();
int nRow = m_xDictsLB->n_children() - 1;
m_xDictsLB->set_toggle(nRow, bChecked, 0);
m_xDictsLB->set_text(nRow, rName, 1);
diff --git a/cui/source/dialogs/linkdlg.cxx b/cui/source/dialogs/linkdlg.cxx
index b4b7410..7e4f043 100644
--- a/cui/source/dialogs/linkdlg.cxx
+++ b/cui/source/dialogs/linkdlg.cxx
@@ -575,11 +575,9 @@ void SvBaseLinksDlg::InsertEntry(const SvBaseLink& rLink, int nPos, bool bSelect
if (nPos == -1)
nPos = m_xTbLinks->n_children();
m_xTbLinks->insert(nullptr, nPos, nullptr, nullptr, nullptr,
nullptr, nullptr, false);
m_xTbLinks->set_id(nPos, OUString::number(reinterpret_cast<sal_Int64>(&rLink)));
m_xTbLinks->insert(nPos);
m_xTbLinks->set_text(nPos, aTxt, 0);
m_xTbLinks->set_id(nPos, OUString::number(reinterpret_cast<sal_Int64>(&rLink)));
if( OBJECT_CLIENT_GRF == rLink.GetObjType() )
m_xTbLinks->set_text(nPos, sFilter, 1);
else
diff --git a/cui/source/dialogs/multipat.cxx b/cui/source/dialogs/multipat.cxx
index b6e409e..6adbb94 100644
--- a/cui/source/dialogs/multipat.cxx
+++ b/cui/source/dialogs/multipat.cxx
@@ -80,8 +80,7 @@ IMPL_LINK(SvxMultiPathDialog, CheckHdl_Impl, const row_col&, rRowCol, void)
void SvxMultiPathDialog::AppendEntry(const OUString& rText, const OUString& rId)
{
m_xRadioLB->insert(nullptr, -1, nullptr, nullptr, nullptr,
nullptr, nullptr, false);
m_xRadioLB->append();
const int nRow = m_xRadioLB->n_children() - 1;
m_xRadioLB->set_toggle(nRow, false, 0);
m_xRadioLB->set_text(nRow, rText, 1);
diff --git a/cui/source/dialogs/srchxtra.cxx b/cui/source/dialogs/srchxtra.cxx
index 39161e4..e1f0a86 100644
--- a/cui/source/dialogs/srchxtra.cxx
+++ b/cui/source/dialogs/srchxtra.cxx
@@ -146,8 +146,7 @@ SvxSearchAttributeDialog::SvxSearchAttributeDialog(weld::Window* pParent,
sal_uInt32 nId = SvxAttrNameTable::FindIndex(nSlot);
if (RESARRAY_INDEX_NOTFOUND != nId)
{
m_xAttrLB->insert(nullptr, -1, nullptr, nullptr, nullptr,
nullptr, nullptr, false);
m_xAttrLB->append();
const int nRow = m_xAttrLB->n_children() - 1;
m_xAttrLB->set_toggle(nRow, bChecked, 0);
m_xAttrLB->set_text(nRow, SvxAttrNameTable::GetString(nId), 1);
diff --git a/cui/source/inc/cfgutil.hxx b/cui/source/inc/cfgutil.hxx
index ff9f4aa..7557a30 100644
--- a/cui/source/inc/cfgutil.hxx
+++ b/cui/source/inc/cfgutil.hxx
@@ -140,7 +140,7 @@ public:
void append(const OUString& rId, const OUString& rStr) { m_xTreeView->append(rId, rStr); }
void append(const OUString& rId, const OUString& rStr, const OUString& rImage)
{
m_xTreeView->insert(nullptr, -1, &rStr, &rId, nullptr, nullptr, &rImage, false);
m_xTreeView->insert(nullptr, -1, &rStr, &rId, nullptr, nullptr, &rImage, false, nullptr);
}
int n_children() const { return m_xTreeView->n_children(); }
void select(int pos) { m_xTreeView->select(pos); }
diff --git a/cui/source/options/certpath.cxx b/cui/source/options/certpath.cxx
index 37eeadc..2eff684 100644
--- a/cui/source/options/certpath.cxx
+++ b/cui/source/options/certpath.cxx
@@ -69,8 +69,7 @@ CertPathDialog::CertPathDialog(weld::Window* pParent)
if (!profile.isEmpty())
{
m_xCertPathList->insert(nullptr, -1, nullptr, nullptr, nullptr,
nullptr, nullptr, false);
m_xCertPathList->append();
const int nRow = m_xCertPathList->n_children() - 1;
m_xCertPathList->set_toggle(nRow, false, 0);
OUString sEntry = OUString::createFromAscii(productNames[i]) + ":" + profile;
@@ -174,8 +173,7 @@ void CertPathDialog::AddCertPath(const OUString &rProfile, const OUString &rPath
}
}
m_xCertPathList->insert(nullptr, -1, nullptr, nullptr, nullptr,
nullptr, nullptr, false);
m_xCertPathList->append();
const int nRow = m_xCertPathList->n_children() - 1;
m_xCertPathList->set_toggle(nRow, true, 0);
m_xCertPathList->set_text(nRow, rProfile, 1);
diff --git a/cui/source/tabpages/autocdlg.cxx b/cui/source/tabpages/autocdlg.cxx
index 3ca962d..678b29b 100644
--- a/cui/source/tabpages/autocdlg.cxx
+++ b/cui/source/tabpages/autocdlg.cxx
@@ -241,8 +241,7 @@ void OfaAutocorrOptionsPage::ActivatePage( const SfxItemSet& )
void OfaAutocorrOptionsPage::InsertEntry(const OUString& rTxt)
{
m_xCheckLB->insert(nullptr, -1, nullptr, nullptr, nullptr,
nullptr, nullptr, false);
m_xCheckLB->append();
const int nRow = m_xCheckLB->n_children() - 1;
m_xCheckLB->set_toggle(nRow, false, CBCOL_FIRST);
m_xCheckLB->set_text(nRow, rTxt, 1);
@@ -382,8 +381,7 @@ OfaSwAutoFmtOptionsPage::OfaSwAutoFmtOptionsPage(TabPageParent pParent,
void OfaSwAutoFmtOptionsPage::CreateEntry(const OUString& rTxt, sal_uInt16 nCol)
{
m_xCheckLB->insert(nullptr, -1, nullptr, nullptr, nullptr,
nullptr, nullptr, false);
m_xCheckLB->append();
const int nRow = m_xCheckLB->n_children() - 1;
if (nCol == CBCOL_FIRST || nCol == CBCOL_BOTH)
m_xCheckLB->set_toggle(nRow, false, CBCOL_FIRST);
@@ -1530,8 +1528,7 @@ enum OfaQuoteOptions
void OfaQuoteTabPage::CreateEntry(weld::TreeView& rCheckLB, const OUString& rTxt, sal_uInt16 nCol, sal_uInt16 nTextCol)
{
rCheckLB.insert(nullptr, -1, nullptr, nullptr, nullptr,
nullptr, nullptr, false);
rCheckLB.append();
const int nRow = rCheckLB.n_children() - 1;
if (nCol == CBCOL_FIRST || nCol == CBCOL_BOTH)
rCheckLB.set_toggle(nRow, false, CBCOL_FIRST);
@@ -2207,8 +2204,7 @@ void OfaSmartTagOptionsTabPage::FillListBox( const SmartTagMgr& rSmartTagMgr )
const OUString aLBEntry = aSmartTagCaption + " (" + aName + ")";
m_xSmartTagTypesLB->insert(nullptr, -1, nullptr, nullptr, nullptr,
nullptr, nullptr, false);
m_xSmartTagTypesLB->append();
const int nRow = m_xSmartTagTypesLB->n_children() - 1;
const bool bCheck = rSmartTagMgr.IsSmartTagTypeEnabled( aSmartTagType );
m_xSmartTagTypesLB->set_toggle(nRow, bCheck, CBCOL_FIRST);
diff --git a/cui/uiconfig/ui/hangulhanjaoptdialog.ui b/cui/uiconfig/ui/hangulhanjaoptdialog.ui
index 0464ba4..1fef474 100644
--- a/cui/uiconfig/ui/hangulhanjaoptdialog.ui
+++ b/cui/uiconfig/ui/hangulhanjaoptdialog.ui
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.18.3 -->
<!-- Generated with glade 3.22.1 -->
<interface domain="cui">
<requires lib="gtk+" version="3.18"/>
<object class="GtkTreeStore" id="liststore2">
@@ -18,7 +18,13 @@
<property name="can_focus">False</property>
<property name="border_width">6</property>
<property name="title" translatable="yes" context="hangulhanjaoptdialog|HangulHanjaOptDialog">Hangul/Hanja Options</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>
diff --git a/extensions/source/propctrlr/selectlabeldialog.cxx b/extensions/source/propctrlr/selectlabeldialog.cxx
index c1a356abf..aeb72b2 100644
--- a/extensions/source/propctrlr/selectlabeldialog.cxx
+++ b/extensions/source/propctrlr/selectlabeldialog.cxx
@@ -104,7 +104,7 @@ namespace pcr
OUString sRootName(PcrRes(RID_STR_FORMS));
OUString aFormImage(RID_EXTBMP_FORMS);
m_xControlTree->insert(nullptr, -1, &sRootName, nullptr,
nullptr, nullptr, &aFormImage, false);
nullptr, nullptr, &aFormImage, false, nullptr);
// build the tree
m_xInitialSelection.reset();
@@ -179,7 +179,7 @@ namespace pcr
OUString aFormImage(RID_EXTBMP_FORM);
m_xControlTree->insert(&rContainerEntry, -1, &sName, nullptr,
nullptr, nullptr, &aFormImage, false);
nullptr, nullptr, &aFormImage, false, nullptr);
auto xIter = m_xControlTree->make_iterator(&rContainerEntry);
m_xControlTree->iter_nth_child(*xIter, nChildren);
sal_Int32 nContChildren = InsertEntries(xCont, *xIter);
@@ -208,7 +208,7 @@ namespace pcr
// all requirements met -> insert
m_xUserData.emplace_back(new Reference<XPropertySet>(xAsSet));
OUString sId(OUString::number(reinterpret_cast<sal_Int64>(m_xUserData.back().get())));
m_xControlTree->insert(&rContainerEntry, -1, &sDisplayName, &sId, nullptr, nullptr, &m_aRequiredControlImage, false);
m_xControlTree->insert(&rContainerEntry, -1, &sDisplayName, &sId, nullptr, nullptr, &m_aRequiredControlImage, false, nullptr);
if (m_xInitialLabelControl == xAsSet)
{
diff --git a/include/vcl/treelistbox.hxx b/include/vcl/treelistbox.hxx
index 1e33511..adf35cb 100644
--- a/include/vcl/treelistbox.hxx
+++ b/include/vcl/treelistbox.hxx
@@ -713,6 +713,8 @@ public:
// A Parent's Children are turned into Children of the Parent which comes next in hierarchy
void RemoveParentKeepChildren( SvTreeListEntry* pParent );
sal_Int32 DefaultCompare(const SvLBoxString* pLeftText, const SvLBoxString* pRightText);
DECL_LINK( DefaultCompare, const SvSortData&, sal_Int32 );
virtual void ModelNotification( SvListAction nActionId, SvTreeListEntry* pEntry1,
SvTreeListEntry* pEntry2, sal_uLong nPos ) override;
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index 962ca72..d3e0b09 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -489,40 +489,47 @@ protected:
public:
virtual void insert(weld::TreeIter* pParent, int pos, const OUString* pStr, const OUString* pId,
const OUString* pIconName, VirtualDevice* pImageSurface,
const OUString* pExpanderName, bool bChildrenOnDemand)
const OUString* pExpanderName, bool bChildrenOnDemand, TreeIter* pRet)
= 0;
void insert(int nRow, TreeIter* pRet = nullptr)
{
insert(nullptr, nRow, nullptr, nullptr, nullptr, nullptr, nullptr, false, pRet);
}
void append(TreeIter* pRet = nullptr) { insert(-1, pRet); }
virtual void set_expander_image(const weld::TreeIter& rIter, const OUString& rExpanderName) = 0;
void insert(int pos, const OUString& rStr, const OUString* pId, const OUString* pIconName,
VirtualDevice* pImageSurface)
{
insert(nullptr, pos, &rStr, pId, pIconName, pImageSurface, nullptr, false);
insert(nullptr, pos, &rStr, pId, pIconName, pImageSurface, nullptr, false, nullptr);
}
void insert_text(int pos, const OUString& rStr)
{
insert(nullptr, pos, &rStr, nullptr, nullptr, nullptr, nullptr, false);
insert(nullptr, pos, &rStr, nullptr, nullptr, nullptr, nullptr, false, nullptr);
}
void append_text(const OUString& rStr)
{
insert(nullptr, -1, &rStr, nullptr, nullptr, nullptr, nullptr, false);
insert(nullptr, -1, &rStr, nullptr, nullptr, nullptr, nullptr, false, nullptr);
}
void append(const OUString& rId, const OUString& rStr)
{
insert(nullptr, -1, &rStr, &rId, nullptr, nullptr, nullptr, false);
insert(nullptr, -1, &rStr, &rId, nullptr, nullptr, nullptr, false, nullptr);
}
void append(const OUString& rId, const OUString& rStr, const OUString& rImage)
{
insert(nullptr, -1, &rStr, &rId, &rImage, nullptr, nullptr, false);
insert(nullptr, -1, &rStr, &rId, &rImage, nullptr, nullptr, false, nullptr);
}
void append(weld::TreeIter* pParent, const OUString& rId, const OUString& rStr,
const OUString& rImage)
{
insert(pParent, -1, &rStr, &rId, &rImage, nullptr, nullptr, false);
insert(pParent, -1, &rStr, &rId, &rImage, nullptr, nullptr, false, nullptr);
}
void append(const OUString& rId, const OUString& rStr, VirtualDevice& rImage)
{
insert(nullptr, -1, &rStr, &rId, nullptr, &rImage, nullptr, false);
insert(nullptr, -1, &rStr, &rId, nullptr, &rImage, nullptr, false, nullptr);
}
void connect_changed(const Link<TreeView&, void>& rLink) { m_aChangeHdl = rLink; }
@@ -606,6 +613,7 @@ public:
virtual void collapse_row(TreeIter& rIter) = 0;
virtual void set_text(TreeIter& rIter, const OUString& rStr, int col = -1) = 0;
virtual OUString get_text(const TreeIter& rIter, int col = -1) const = 0;
virtual void set_id(TreeIter& rIter, const OUString& rId) = 0;
virtual OUString get_id(const TreeIter& rIter) const = 0;
virtual void scroll_to_row(const TreeIter& rIter) = 0;
virtual bool is_selected(const TreeIter& rIter) const = 0;
@@ -626,9 +634,16 @@ public:
void unselect_all() { select(-1); }
virtual int n_children() const = 0;
virtual void make_sorted() = 0;
virtual bool get_sort_order() const = 0;
virtual void set_sort_order(bool bAscending) = 0;
// TRUE ascending, FALSE, descending, INDET, neither (off)
virtual void set_sort_indicator(TriState eState, int nColumn = -1) = 0;
virtual TriState get_sort_indicator(int nColumn = -1) const = 0;
virtual int get_sort_column() const = 0;
virtual void set_sort_column(int nColumn) = 0;
virtual void clear() = 0;
virtual int get_height_rows(int nRows) const = 0;
diff --git a/sc/source/ui/dbgui/dpgroupdlg.cxx b/sc/source/ui/dbgui/dpgroupdlg.cxx
index a7ba75b..9355d4e 100644
--- a/sc/source/ui/dbgui/dpgroupdlg.cxx
+++ b/sc/source/ui/dbgui/dpgroupdlg.cxx
@@ -223,7 +223,7 @@ ScDPDateGroupDlg::ScDPDateGroupDlg(weld::Window* pParent,
nDatePart = css::sheet::DataPilotFieldGroupBy::MONTHS;
for (size_t nIdx = 0; nIdx < SAL_N_ELEMENTS(aDatePartResIds); ++nIdx)
{
mxLbUnits->insert(nullptr, -1, nullptr, nullptr, nullptr, nullptr, nullptr, false);
mxLbUnits->append();
mxLbUnits->set_toggle(nIdx, (nDatePart & spnDateParts[ nIdx ]) != 0, 0);
mxLbUnits->set_text(nIdx, ScResId(aDatePartResIds[nIdx]), 1);
}
diff --git a/sc/source/ui/dbgui/pvfundlg.cxx b/sc/source/ui/dbgui/pvfundlg.cxx
index 9b77bbe..f2d3571 100644
--- a/sc/source/ui/dbgui/pvfundlg.cxx
+++ b/sc/source/ui/dbgui/pvfundlg.cxx
@@ -95,8 +95,7 @@ bool lclFillListBox(weld::TreeView& rLBox, const vector<ScDPLabelData::Member>&
bool bEmpty = false;
for (const auto& rMember : rMembers)
{
rLBox.insert(nullptr, -1, nullptr, nullptr,
nullptr, nullptr, nullptr, false);
rLBox.append();
int pos = rLBox.n_children() - 1;
rLBox.set_toggle(pos, false, 0);
OUString aName = rMember.getDisplayName();
diff --git a/sc/source/ui/miscdlgs/protectiondlg.cxx b/sc/source/ui/miscdlgs/protectiondlg.cxx
index f363f41..61fe3de 100644
--- a/sc/source/ui/miscdlgs/protectiondlg.cxx
+++ b/sc/source/ui/miscdlgs/protectiondlg.cxx
@@ -91,8 +91,7 @@ void ScTableProtectionDlg::WriteData(ScTableProtection& rData) const
void ScTableProtectionDlg::InsertEntry(const OUString& rTxt)
{
m_xOptionsListBox->insert(nullptr, -1, nullptr, nullptr, nullptr,
nullptr, nullptr, false);
m_xOptionsListBox->append();
const int nRow = m_xOptionsListBox->n_children() - 1;
m_xOptionsListBox->set_toggle(nRow, false, 0);
m_xOptionsListBox->set_text(nRow, rTxt, 1);
diff --git a/sc/source/ui/miscdlgs/solveroptions.cxx b/sc/source/ui/miscdlgs/solveroptions.cxx
index 77ad31b..5830a20 100644
--- a/sc/source/ui/miscdlgs/solveroptions.cxx
+++ b/sc/source/ui/miscdlgs/solveroptions.cxx
@@ -183,8 +183,7 @@ void ScSolverOptionsDialog::FillListBox()
uno::Any aValue = maProperties[nPos].Value;
uno::TypeClass eClass = aValue.getValueTypeClass();
m_xLbSettings->insert(nullptr, -1, nullptr, nullptr,
nullptr, nullptr, nullptr, false);
m_xLbSettings->append();
if ( eClass == uno::TypeClass_BOOLEAN )
{
diff --git a/sc/source/ui/namedlg/namemgrtable.cxx b/sc/source/ui/namedlg/namemgrtable.cxx
index 8f93788..246f213 100644
--- a/sc/source/ui/namedlg/namemgrtable.cxx
+++ b/sc/source/ui/namedlg/namemgrtable.cxx
@@ -369,7 +369,7 @@ IMPL_LINK_NOARG(RangeManagerTable, SizeAllocHdl, const Size&, void)
void RangeManagerTable::addEntry(const ScRangeNameLine& rLine, bool bSetCurEntry)
{
int nRow = m_xTreeView->n_children();
m_xTreeView->insert(nullptr, -1, nullptr, nullptr, nullptr, nullptr, nullptr, false);
m_xTreeView->append();
m_xTreeView->set_text(nRow, rLine.aName, 0);
m_xTreeView->set_text(nRow, rLine.aExpression, 1);
m_xTreeView->set_text(nRow, rLine.aScope, 2);
diff --git a/sd/source/ui/dlg/sdtreelb.cxx b/sd/source/ui/dlg/sdtreelb.cxx
index 16cd303..450e283 100644
--- a/sd/source/ui/dlg/sdtreelb.cxx
+++ b/sd/source/ui/dlg/sdtreelb.cxx
@@ -1563,7 +1563,7 @@ IMPL_LINK(SdPageObjsTLV, RequestingChildrenHdl, weld::TreeIter&, rFileEntry, boo
{
OUString sId(OUString::number(1));
m_xTreeView->insert(&rFileEntry, -1, &pPage->GetName(), &sId,
nullptr, nullptr, &sImgPage, false);
nullptr, nullptr, &sImgPage, false, nullptr);
if (!xPageEntry)
{
@@ -1584,17 +1584,17 @@ IMPL_LINK(SdPageObjsTLV, RequestingChildrenHdl, weld::TreeIter&, rFileEntry, boo
if( pObj->GetObjInventor() == SdrInventor::Default && pObj->GetObjIdentifier() == OBJ_OLE2 )
{
m_xTreeView->insert(xPageEntry.get(), -1, &aStr, nullptr,
nullptr, nullptr, &sImgOle, false);
nullptr, nullptr, &sImgOle, false, nullptr);
}
else if( pObj->GetObjInventor() == SdrInventor::Default && pObj->GetObjIdentifier() == OBJ_GRAF )
{
m_xTreeView->insert(xPageEntry.get(), -1, &aStr, nullptr,
nullptr, nullptr, &sImgGraphic, false);
nullptr, nullptr, &sImgGraphic, false, nullptr);
}
else
{
m_xTreeView->insert(xPageEntry.get(), -1, &aStr, nullptr,
nullptr, nullptr, &sImgObjects, false);
nullptr, nullptr, &sImgObjects, false, nullptr);
}
}
}
@@ -1666,7 +1666,7 @@ void SdPageObjsTLV::Fill( const SdDrawDocument* pInDoc, SfxMedium* pInMedium,
OUString sId(OUString::number(1));
// insert document name
m_xTreeView->insert(nullptr, -1, &m_aDocName, &sId, nullptr, nullptr, &sImgDoc, true);
m_xTreeView->insert(nullptr, -1, &m_aDocName, &sId, nullptr, nullptr, &sImgDoc, true, nullptr);
}
SdPageObjsTLV::~SdPageObjsTLV()
diff --git a/sd/source/ui/inc/sdtreelb.hxx b/sd/source/ui/inc/sdtreelb.hxx
index 00e30ac7..bedeb52 100644
--- a/sd/source/ui/inc/sdtreelb.hxx
+++ b/sd/source/ui/inc/sdtreelb.hxx
@@ -398,7 +398,7 @@ public:
void InsertEntry(const OUString &rName, const OUString &rExpander)
{
m_xTreeView->insert(nullptr, -1, &rName, nullptr, nullptr, nullptr, &rExpander, false);
m_xTreeView->insert(nullptr, -1, &rName, nullptr, nullptr, nullptr, &rExpander, false, nullptr);
}
};
diff --git a/svx/source/unodialogs/textconversiondlgs/chinese_dictionarydialog.cxx b/svx/source/unodialogs/textconversiondlgs/chinese_dictionarydialog.cxx
index e820fe6..0cc102f 100644
--- a/svx/source/unodialogs/textconversiondlgs/chinese_dictionarydialog.cxx
+++ b/svx/source/unodialogs/textconversiondlgs/chinese_dictionarydialog.cxx
@@ -37,63 +37,38 @@
#include <vcl/svapp.hxx>
#include <osl/diagnose.h>
namespace textconversiondlgs
{
using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;
#define HEADER_BAR_BITS ( HeaderBarItemBits::LEFT | HeaderBarItemBits::CLICKABLE | HeaderBarItemBits::FIXED | HeaderBarItemBits::FIXEDPOS )
DictionaryList::DictionaryList(SvSimpleTableContainer& rParent, WinBits nBits)
: SvSimpleTable(rParent, nBits)
DictionaryList::DictionaryList(std::unique_ptr<weld::TreeView> xControl)
: m_xControl(std::move(xControl))
, m_xIter(m_xControl->make_iterator())
, m_pED_Term(nullptr)
, m_pED_Mapping(nullptr)
, m_pLB_Property(nullptr)
, m_aToBeDeleted()
, m_nSortColumnIndex(0)
{
}
DictionaryList::~DictionaryList()
{
disposeOnce();
}
void DictionaryList::dispose()
{
m_pED_Term.clear();
m_pED_Mapping.clear();
m_pLB_Property.clear();
SvSimpleTable::dispose();
m_xControl->make_sorted();
}
OUString DictionaryList::getPropertyTypeName( sal_Int16 nConversionPropertyType ) const
{
if(!m_pLB_Property || !m_pLB_Property->GetEntryCount())
if (!m_pLB_Property || !m_pLB_Property->get_count())
return OUString();
sal_uInt16 nPos = static_cast<sal_uInt16>( nConversionPropertyType )-1;
if(nPos<m_pLB_Property->GetEntryCount())
return m_pLB_Property->GetEntry(nPos);
return m_pLB_Property->GetEntry(0);
}
OUString DictionaryList::makeTabString( const DictionaryEntry& rEntry ) const
{
OUString aStr( rEntry.m_aTerm );
aStr += "\t";
aStr += rEntry.m_aMapping;
aStr += "\t";
aStr += getPropertyTypeName( rEntry.m_nConversionPropertyType );
return aStr;
if (nPos < m_pLB_Property->get_count())
return m_pLB_Property->get_text(nPos);
return m_pLB_Property->get_text(0);
}
void DictionaryList::save()
{
if( !m_xDictionary.is() )
if (!m_xDictionary.is())
return;
Reference< linguistic2::XConversionPropertyType > xPropertyType( m_xDictionary, uno::UNO_QUERY );
@@ -106,7 +81,8 @@ void DictionaryList::save()
pE = m_aToBeDeleted[nN];
m_xDictionary->removeEntry( pE->m_aTerm, pE->m_aMapping );
}
for( nN = GetRowCount(); nN--; )
int nRowCount = m_xControl->n_children();
for( nN = nRowCount; nN--; )
{
pE = getEntryOnPos( nN );
if(pE->m_bNewEntry)
@@ -130,7 +106,8 @@ void DictionaryList::save()
void DictionaryList::deleteAll()
{
sal_Int32 nN;
for( nN = GetRowCount(); nN--; )
int nRowCount = m_xControl->n_children();
for( nN = nRowCount; nN--; )
deleteEntryOnPos( nN );
for( nN = m_aToBeDeleted.size(); nN--; )
{
@@ -174,40 +151,34 @@ void DictionaryList::refillFromDictionary( sal_Int32 nTextConversionOptions )
nConversionPropertyType = xPropertyType->getPropertyType(aLeft, aRight);
DictionaryEntry* pEntry = new DictionaryEntry( aLeft, aRight, nConversionPropertyType );
SvTreeListEntry* pLBEntry = InsertEntry( makeTabString( *pEntry ) );
pLBEntry->SetUserData( pEntry );
}
if( GetEntryCount() > 0 )
SelectRow( 0 );
m_xControl->append(m_xIter.get());
m_xControl->set_text(*m_xIter, pEntry->m_aTerm, 0);
m_xControl->set_text(*m_xIter, pEntry->m_aMapping, 1);
m_xControl->set_text(*m_xIter, getPropertyTypeName(pEntry->m_nConversionPropertyType), 2);
m_xControl->set_id(*m_xIter, OUString::number(reinterpret_cast<sal_Int64>(pEntry)));
}
}
DictionaryEntry* DictionaryList::getFirstSelectedEntry() const
{
DictionaryEntry* pRet=nullptr;
for( sal_Int32 nN=GetRowCount(); nN--; )
{
if( IsRowSelected( nN ) )
{
pRet = getEntryOnPos( nN );
break;
}
}
int nN = m_xControl->get_selected_index();
if (nN != -1)
pRet = getEntryOnPos( nN );
return pRet;
}
DictionaryEntry* DictionaryList::getEntryOnPos( sal_Int32 nPos ) const
DictionaryEntry* DictionaryList::getEntryOnPos(sal_Int32 nPos) const
{
DictionaryEntry* pEntry=nullptr;
SvTreeListEntry* pLBEntry = GetEntryOnPos( nPos );
if(pLBEntry)
pEntry = static_cast<DictionaryEntry*>(pLBEntry->GetUserData());
return pEntry;
OUString sLBEntry = m_xControl->get_id(nPos);
return reinterpret_cast<DictionaryEntry*>(sLBEntry.toInt64());
}
DictionaryEntry* DictionaryList::getTermEntry( const OUString& rTerm ) const
{
for( sal_Int32 nN=GetRowCount(); nN--; )
int nRowCount = m_xControl->n_children();
for( sal_Int32 nN = nRowCount; nN--; )
{
DictionaryEntry* pE = getEntryOnPos( nN );
if( pE && rTerm == pE->m_aTerm )
@@ -221,25 +192,26 @@ bool DictionaryList::hasTerm( const OUString& rTerm ) const
return getTermEntry(rTerm) !=nullptr ;
}
void DictionaryList::addEntry( const OUString& rTerm, const OUString& rMapping
, sal_Int16 nConversionPropertyType, sal_uIntPtr nPos )
void DictionaryList::addEntry(const OUString& rTerm, const OUString& rMapping,
sal_Int16 nConversionPropertyType, int nPos)
{
if( hasTerm( rTerm ) )
return;
DictionaryEntry* pEntry = new DictionaryEntry( rTerm, rMapping, nConversionPropertyType, true );
SvTreeListEntry* pLBEntry = InsertEntryToColumn( makeTabString( *pEntry ), nPos );
pLBEntry->SetUserData( pEntry );
SelectRow( GetEntryPos( pLBEntry ) );
m_xControl->insert(nPos, m_xIter.get());
m_xControl->set_text(*m_xIter, pEntry->m_aTerm, 0);
m_xControl->set_text(*m_xIter, pEntry->m_aMapping, 1);
m_xControl->set_text(*m_xIter, getPropertyTypeName(pEntry->m_nConversionPropertyType), 2);
m_xControl->set_id(*m_xIter, OUString::number(reinterpret_cast<sal_Int64>(pEntry)));
m_xControl->select(*m_xIter);
}
void DictionaryList::deleteEntryOnPos( sal_Int32 nPos )
{
SvTreeListEntry* pLBEntry = GetEntryOnPos( nPos );
DictionaryEntry* pEntry = getEntryOnPos( nPos );
if( pLBEntry )
RemoveParentKeepChildren( pLBEntry );
if( pEntry )
m_xControl->remove(nPos);
if (pEntry)
{
if( pEntry->m_bNewEntry )
delete pEntry;
@@ -248,17 +220,17 @@ void DictionaryList::deleteEntryOnPos( sal_Int32 nPos )
}
}
sal_uIntPtr DictionaryList::deleteEntries( const OUString& rTerm )
int DictionaryList::deleteEntries( const OUString& rTerm )
{
sal_uIntPtr nPos = TREELIST_APPEND;
for( sal_Int32 nN=GetRowCount(); nN--; )
int nPos = -1;
int nRowCount = m_xControl->n_children();
for (sal_Int32 nN = nRowCount; nN--;)
{
DictionaryEntry* pCurEntry = getEntryOnPos( nN );
if( rTerm == pCurEntry->m_aTerm )
{
nPos = nN;
SvTreeListEntry* pCurLBEntry = GetEntryOnPos( nN );
RemoveParentKeepChildren( pCurLBEntry );
m_xControl->remove(nN);
if( pCurEntry->m_bNewEntry )
delete pCurEntry;
else
@@ -268,75 +240,6 @@ sal_uIntPtr DictionaryList::deleteEntries( const OUString& rTerm )
return nPos;
}
void DictionaryList::sortByColumn( sal_uInt16 nSortColumnIndex, bool bSortAtoZ )
{
m_nSortColumnIndex=nSortColumnIndex;
if( nSortColumnIndex<3 )
{
if(bSortAtoZ)
GetModel()->SetSortMode(SortAscending);
else
GetModel()->SetSortMode(SortDescending);
GetModel()->SetCompareHdl( LINK( this, DictionaryList, CompareHdl));
GetModel()->Resort();
}
else
GetModel()->SetSortMode(SortNone);
}
IMPL_LINK( DictionaryList, CompareHdl, const SvSortData&, rData, sal_Int32 )
{
SvTreeListEntry* pLeft = const_cast<SvTreeListEntry*>(rData.pLeft);
SvTreeListEntry* pRight = const_cast<SvTreeListEntry*>(rData.pRight);
return ColumnCompare(pLeft,pRight);
}
sal_Int32 DictionaryList::ColumnCompare( SvTreeListEntry* pLeft, SvTreeListEntry* pRight )
{
sal_Int32 nCompare = 0;
SvLBoxItem* pLeftItem = getItemAtColumn( pLeft, m_nSortColumnIndex );
SvLBoxItem* pRightItem = getItemAtColumn( pRight, m_nSortColumnIndex );
if(pLeftItem != nullptr && pRightItem != nullptr)
{
SvLBoxItemType nLeftKind = pLeftItem->GetType();
SvLBoxItemType nRightKind = pRightItem->GetType();
if (nRightKind == SvLBoxItemType::String &&
nLeftKind == SvLBoxItemType::String)
{
IntlWrapper aIntlWrapper(SvtSysLocale().GetUILanguageTag());
const CollatorWrapper* pCollator = aIntlWrapper.getCaseCollator();
nCompare = pCollator->compareString( static_cast<SvLBoxString*>(pLeftItem)->GetText(),
static_cast<SvLBoxString*>(pRightItem)->GetText());
if (nCompare == 0)
nCompare = -1;
}
}
return nCompare;
}
SvLBoxItem* DictionaryList::getItemAtColumn( SvTreeListEntry* pEntry, sal_uInt16 nColumn ) const
{
SvLBoxItem* pItem = nullptr;
if( pEntry )
{
sal_uInt16 nCount = pEntry->ItemCount();
nColumn++;
if( nTreeFlags & SvTreeFlags::CHKBTN )
nColumn++;
if( nColumn < nCount )
pItem = &pEntry->GetItem( nColumn );
}
return pItem;
}
DictionaryEntry::DictionaryEntry( const OUString& rTerm, const OUString& rMapping
, sal_Int16 nConversionPropertyType
, bool bNewEntry )
@@ -353,39 +256,26 @@ DictionaryEntry::~DictionaryEntry()
{
}
void DictionaryList::setColSizes()
IMPL_LINK_NOARG(ChineseDictionaryDialog, SizeAllocHdl, const Size&, void)
{
HeaderBar &rBar = GetTheHeaderBar();
if (rBar.GetItemCount() < 3)
DictionaryList* pControl = m_xCT_DictionaryToTraditional->get_visible() ?
m_xCT_DictionaryToTraditional.get() :
m_xCT_DictionaryToSimplified.get();
std::vector<int> aWidths;
int x1, x2, y, width, height;
if (!m_xED_Mapping->get_extents_relative_to(pControl->get_widget(), x1, y, width, height))
return;
long nWidth1 = m_pED_Term->get_preferred_size().Width();
long nWidth2 = m_pED_Mapping->get_preferred_size().Width();
long nWidth3 = m_pLB_Property->get_preferred_size().Width();
long nWidth = GetSizePixel().Width();
long nPos3 = nWidth - nWidth3;
long nRemainder = nWidth - (nWidth1 + nWidth2 + nWidth3);
long aTabPositions[] = { 0, nWidth1 + (nRemainder/2), nPos3 };
SvSimpleTable::SetTabs(SAL_N_ELEMENTS(aTabPositions), aTabPositions, MapUnit::MapPixel);
}
void DictionaryList::Resize()
{
SvSimpleTable::Resize();
setColSizes();
aWidths.push_back(x1);
if (!m_xLB_Property->get_extents_relative_to(pControl->get_widget(), x2, y, width, height))
return;
aWidths.push_back(x2 - x1);
m_xCT_DictionaryToTraditional->get_widget().set_column_fixed_widths(aWidths);
m_xCT_DictionaryToSimplified->get_widget().set_column_fixed_widths(aWidths);
}
void DictionaryList::init(const Reference< linguistic2::XConversionDictionary>& xDictionary,
vcl::Window *pED_Term, vcl::Window *pED_Mapping, ListBox *pLB_Property,
vcl::Window const *pFT_Term, vcl::Window const *pFT_Mapping, vcl::Window const *pFT_Property)
weld::Entry *pED_Term, weld::Entry *pED_Mapping, weld::ComboBox *pLB_Property)
{
SetStyle( WB_VSCROLL | WB_TABSTOP );
SetSelectionMode( SelectionMode::Single );
SetBorderStyle( WindowBorderStyle::MONO );
SetHighlightRange();
if (m_xDictionary.is())
return;
@@ -395,72 +285,51 @@ void DictionaryList::init(const Reference< linguistic2::XConversionDictionary>&
m_pED_Mapping = pED_Mapping;
m_pLB_Property = pLB_Property;
HeaderBar& rHeaderBar = GetTheHeaderBar();
m_xControl->set_sort_column(0);
m_xControl->set_sort_indicator(TRISTATE_TRUE, 0);
OUString aColumn1( OutputDevice::GetNonMnemonicString( pFT_Term->GetText() ) );
OUString aColumn2( OutputDevice::GetNonMnemonicString( pFT_Mapping->GetText() ) );
OUString aColumn3( OutputDevice::GetNonMnemonicString( pFT_Property->GetText() ) );
long nWidth1 = m_pED_Term->get_preferred_size().Width();
long nWidth2 = m_pED_Mapping->get_preferred_size().Width();
long nWidth3 = m_pLB_Property->get_preferred_size().Width();
HeaderBarItemBits nBits = HEADER_BAR_BITS;
rHeaderBar.InsertItem( 1, aColumn1, nWidth1, nBits | HeaderBarItemBits::UPARROW );
rHeaderBar.InsertItem( 2, aColumn2, nWidth2, nBits );
rHeaderBar.InsertItem( 3, aColumn3, nWidth3, nBits );
long aTabPositions[] = { 0, nWidth1, nWidth1 + nWidth2 };
SetTabs( SAL_N_ELEMENTS(aTabPositions), aTabPositions, MapUnit::MapPixel );
std::vector<int> aWidths;
aWidths.push_back(m_pED_Term->get_preferred_size().Width());
aWidths.push_back(m_pED_Mapping->get_preferred_size().Width());
m_xControl->set_column_fixed_widths(aWidths);
}
void ChineseDictionaryDialog::initDictionaryControl(DictionaryList *pList,
const Reference< linguistic2::XConversionDictionary>& xDictionary)
{
//init HeaderBar and set tabs
HeaderBar& rHeaderBar = pList->GetTheHeaderBar();
//set hdl
rHeaderBar.SetSelectHdl( LINK( this, ChineseDictionaryDialog, HeaderBarClick ) );
//set widgets to track the width of for columns
pList->init(xDictionary,
m_pED_Term, m_pED_Mapping, m_pLB_Property,
m_pFT_Term, m_pFT_Mapping, m_pFT_Property);
m_xED_Term.get(), m_xED_Mapping.get(), m_xLB_Property.get());
}
ChineseDictionaryDialog::ChineseDictionaryDialog( vcl::Window* pParent )
: ModalDialog(pParent, "ChineseDictionaryDialog",
"svx/ui/chinesedictionary.ui")
ChineseDictionaryDialog::ChineseDictionaryDialog(weld::Window* pParent)
: GenericDialogController(pParent, "svx/ui/chinesedictionary.ui", "ChineseDictionaryDialog")
, m_nTextConversionOptions(i18n::TextConversionOption::NONE)
, m_xRB_To_Simplified(m_xBuilder->weld_radio_button("tradtosimple"))
, m_xRB_To_Traditional(m_xBuilder->weld_radio_button("simpletotrad"))
, m_xCB_Reverse(m_xBuilder->weld_check_button("reverse"))
, m_xFT_Term(m_xBuilder->weld_label("termft"))
, m_xED_Term(m_xBuilder->weld_entry("term"))
, m_xFT_Mapping(m_xBuilder->weld_label("mappingft"))
, m_xED_Mapping(m_xBuilder->weld_entry("mapping"))
, m_xFT_Property(m_xBuilder->weld_label("propertyft"))
, m_xLB_Property(m_xBuilder->weld_combo_box("property"))
, m_xCT_DictionaryToSimplified(new DictionaryList(m_xBuilder->weld_tree_view("tradtosimpleview")))
, m_xCT_DictionaryToTraditional(new DictionaryList(m_xBuilder->weld_tree_view("simpletotradview")))
, m_xPB_Add(m_xBuilder->weld_button("add"))
, m_xPB_Modify(m_xBuilder->weld_button("modify"))
, m_xPB_Delete(m_xBuilder->weld_button("delete"))
{
get(m_pRB_To_Simplified, "tradtosimple");
get(m_pRB_To_Traditional, "simpletotrad");
get(m_pCB_Reverse, "reverse");
get(m_pFT_Term, "termft");
get(m_pED_Term, "term");
get(m_pFT_Mapping, "mappingft");
get(m_pED_Mapping, "mapping");
get(m_pFT_Property, "propertyft");
get(m_pLB_Property, "property");
get(m_pPB_Add, "add");
get(m_pPB_Modify, "modify");
get(m_pPB_Delete, "delete");
get(mpToSimplifiedContainer, "tradtosimpleview");
mpToSimplifiedContainer->set_height_request(mpToSimplifiedContainer->GetTextHeight() * 8);
m_pCT_DictionaryToSimplified = VclPtr<DictionaryList>::Create(*mpToSimplifiedContainer, 0);
get(mpToTraditionalContainer, "simpletotradview");
mpToTraditionalContainer->set_height_request(mpToTraditionalContainer->GetTextHeight() * 8);
m_pCT_DictionaryToTraditional = VclPtr<DictionaryList>::Create(*mpToTraditionalContainer, 0);
m_xCT_DictionaryToSimplified->set_size_request(-1, m_xCT_DictionaryToSimplified->get_height_rows(8));
m_xCT_DictionaryToTraditional->set_size_request(-1, m_xCT_DictionaryToTraditional->get_height_rows(8));
SvtLinguConfig aLngCfg;
bool bValue;
Any aAny( aLngCfg.GetProperty( OUString( UPN_IS_REVERSE_MAPPING ) ) );
if( aAny >>= bValue )
m_pCB_Reverse->Check( bValue );
m_xCB_Reverse->set_active( bValue );
m_pLB_Property->SetDropDownLineCount( m_pLB_Property->GetEntryCount() );
m_pLB_Property->SelectEntryPos(0);
m_xLB_Property->set_active(0);
Reference< linguistic2::XConversionDictionary > xDictionary_To_Simplified;
Reference< linguistic2::XConversionDictionary > xDictionary_To_Traditional;
@@ -519,69 +388,53 @@ ChineseDictionaryDialog::ChineseDictionaryDialog( vcl::Window* pParent )
}
//init dictionary controls
initDictionaryControl(m_pCT_DictionaryToSimplified, xDictionary_To_Simplified);
initDictionaryControl(m_pCT_DictionaryToTraditional, xDictionary_To_Traditional);
initDictionaryControl(m_xCT_DictionaryToSimplified.get(), xDictionary_To_Simplified);
initDictionaryControl(m_xCT_DictionaryToTraditional.get(), xDictionary_To_Traditional);
//set hdl
m_xCT_DictionaryToSimplified->connect_column_clicked(LINK(this, ChineseDictionaryDialog, ToSimplifiedHeaderBarClick));
m_xCT_DictionaryToTraditional->connect_column_clicked(LINK(this, ChineseDictionaryDialog, ToTraditionalHeaderBarClick));
updateAfterDirectionChange();
m_pED_Term->SetModifyHdl( LINK( this, ChineseDictionaryDialog, EditFieldsHdl ) );
m_pED_Mapping->SetModifyHdl( LINK( this, ChineseDictionaryDialog, EditFieldsHdl ) );
m_pLB_Property->SetSelectHdl( LINK( this, ChineseDictionaryDialog, EditFieldsListBoxHdl ) );
m_xED_Term->connect_changed( LINK( this, ChineseDictionaryDialog, EditFieldsHdl ) );
m_xED_Mapping->connect_changed( LINK( this, ChineseDictionaryDialog, EditFieldsHdl ) );
m_xLB_Property->connect_changed( LINK( this, ChineseDictionaryDialog, EditFieldsListBoxHdl ) );
m_pRB_To_Simplified->SetClickHdl( LINK( this, ChineseDictionaryDialog, DirectionHdl ) );
m_pRB_To_Traditional->SetClickHdl( LINK( this, ChineseDictionaryDialog, DirectionHdl ) );
m_xRB_To_Simplified->connect_clicked( LINK( this, ChineseDictionaryDialog, DirectionHdl ) );
m_xRB_To_Traditional->connect_clicked( LINK( this, ChineseDictionaryDialog, DirectionHdl ) );
m_pCT_DictionaryToSimplified->SetSelectHdl( LINK( this, ChineseDictionaryDialog, MappingSelectHdl ));
m_pCT_DictionaryToTraditional->SetSelectHdl( LINK( this, ChineseDictionaryDialog, MappingSelectHdl ));
m_xCT_DictionaryToSimplified->connect_changed( LINK( this, ChineseDictionaryDialog, MappingSelectHdl ));
m_xCT_DictionaryToTraditional->connect_changed( LINK( this, ChineseDictionaryDialog, MappingSelectHdl ));
m_pPB_Add->SetClickHdl( LINK( this, ChineseDictionaryDialog, AddHdl ) );
m_pPB_Modify->SetClickHdl( LINK( this, ChineseDictionaryDialog, ModifyHdl ) );
m_pPB_Delete->SetClickHdl( LINK( this, ChineseDictionaryDialog, DeleteHdl ) );
m_xPB_Add->connect_clicked( LINK( this, ChineseDictionaryDialog, AddHdl ) );
m_xPB_Modify->connect_clicked( LINK( this, ChineseDictionaryDialog, ModifyHdl ) );
m_xPB_Delete->connect_clicked( LINK( this, ChineseDictionaryDialog, DeleteHdl ) );
m_xED_Mapping->connect_size_allocate(LINK(this, ChineseDictionaryDialog, SizeAllocHdl));
m_xLB_Property->connect_size_allocate(LINK(this, ChineseDictionaryDialog, SizeAllocHdl));
}
ChineseDictionaryDialog::~ChineseDictionaryDialog()
{
disposeOnce();
}
void ChineseDictionaryDialog::dispose()
{
m_xContext=nullptr;
m_pCT_DictionaryToSimplified.disposeAndClear();
m_pCT_DictionaryToTraditional.disposeAndClear();
m_pRB_To_Simplified.clear();
m_pRB_To_Traditional.clear();
m_pCB_Reverse.clear();
m_pFT_Term.clear();
m_pED_Term.clear();
m_pFT_Mapping.clear();
m_pED_Mapping.clear();
m_pFT_Property.clear();
m_pLB_Property.clear();
mpToSimplifiedContainer.clear();
mpToTraditionalContainer.clear();
m_pPB_Add.clear();
m_pPB_Modify.clear();
m_pPB_Delete.clear();
ModalDialog::dispose();
}
void ChineseDictionaryDialog::setDirectionAndTextConversionOptions( bool bDirectionToSimplified, sal_Int32 nTextConversionOptions /*i18n::TextConversionOption*/ )
{
if( bDirectionToSimplified == m_pRB_To_Simplified->IsChecked()
if( bDirectionToSimplified == m_xRB_To_Simplified->get_active()
&& nTextConversionOptions == m_nTextConversionOptions )
return;
m_nTextConversionOptions = nTextConversionOptions;
if( bDirectionToSimplified )
m_pRB_To_Simplified->Check();
if (bDirectionToSimplified)
m_xRB_To_Simplified->set_active(true);
else
m_pRB_To_Traditional->Check();
m_xRB_To_Traditional->set_active(true);
updateAfterDirectionChange();
}
IMPL_LINK_NOARG(ChineseDictionaryDialog, DirectionHdl, Button*, void)
IMPL_LINK_NOARG(ChineseDictionaryDialog, DirectionHdl, weld::Button&, void)
{
updateAfterDirectionChange();
}
@@ -590,42 +443,44 @@ void ChineseDictionaryDialog::updateAfterDirectionChange()
{
Reference< linguistic2::XConversionDictionary > xDictionary;
if( m_pRB_To_Simplified->IsChecked() )
if (m_xRB_To_Simplified->get_active())
{
mpToTraditionalContainer->Hide();
mpToSimplifiedContainer->Show();
xDictionary = m_pCT_DictionaryToSimplified->m_xDictionary;
m_xCT_DictionaryToTraditional->hide();
m_xCT_DictionaryToSimplified->show();
xDictionary = m_xCT_DictionaryToSimplified->m_xDictionary;
}
else
{
mpToSimplifiedContainer->Hide();
mpToTraditionalContainer->Show();
xDictionary = m_pCT_DictionaryToTraditional->m_xDictionary;
m_xCT_DictionaryToSimplified->hide();
m_xCT_DictionaryToTraditional->show();
xDictionary = m_xCT_DictionaryToTraditional->m_xDictionary;
}
updateButtons();
}
IMPL_LINK_NOARG(ChineseDictionaryDialog, EditFieldsListBoxHdl, ListBox&, void)
IMPL_LINK_NOARG(ChineseDictionaryDialog, EditFieldsListBoxHdl, weld::ComboBox&, void)
{
updateButtons();
}
IMPL_LINK_NOARG(ChineseDictionaryDialog, EditFieldsHdl, Edit&, void)
IMPL_LINK_NOARG(ChineseDictionaryDialog, EditFieldsHdl, weld::Entry&, void)
{
updateButtons();
}
IMPL_LINK_NOARG(ChineseDictionaryDialog, MappingSelectHdl, SvTreeListBox*, void)
IMPL_LINK_NOARG(ChineseDictionaryDialog, MappingSelectHdl, weld::TreeView&, void)
{
DictionaryEntry* pE = getActiveDictionary().getFirstSelectedEntry();
if(pE)
if (pE)
{
m_pED_Term->SetText( pE->m_aTerm );
m_pED_Mapping->SetText( pE->m_aMapping );
m_xED_Term->set_text( pE->m_aTerm );
m_xED_Mapping->set_text( pE->m_aMapping );
sal_Int16 nPos = pE->m_nConversionPropertyType-1;
if( nPos<0 || nPos>=m_pLB_Property->GetEntryCount() )
if (nPos<0 || nPos>=m_xLB_Property->get_count())
nPos=0;
if( m_pLB_Property->GetEntryCount() )
m_pLB_Property->SelectEntryPos(nPos);
if (m_xLB_Property->get_count())
m_xLB_Property->set_active(nPos);
}
updateButtons();
@@ -633,7 +488,7 @@ IMPL_LINK_NOARG(ChineseDictionaryDialog, MappingSelectHdl, SvTreeListBox*, void)
bool ChineseDictionaryDialog::isEditFieldsHaveContent() const
{
return !m_pED_Term->GetText().isEmpty() && !m_pED_Mapping->GetText().isEmpty();
return !m_xED_Term->get_text().isEmpty() && !m_xED_Mapping->get_text().isEmpty();
}
bool ChineseDictionaryDialog::isEditFieldsContentEqualsSelectedListContent() const
@@ -641,11 +496,11 @@ bool ChineseDictionaryDialog::isEditFieldsContentEqualsSelectedListContent() con
DictionaryEntry* pE = getActiveDictionary().getFirstSelectedEntry();
if( pE )
{
if( pE->m_aTerm != m_pED_Term->GetText() )
if (pE->m_aTerm != m_xED_Term->get_text())
return false;
if( pE->m_aMapping != m_pED_Mapping->GetText() )
if (pE->m_aMapping != m_xED_Mapping->get_text())
return false;
if( pE->m_nConversionPropertyType != m_pLB_Property->GetSelectedEntryPos()+1 )
if (pE->m_nConversionPropertyType != m_xLB_Property->get_active() + 1)
return false;
return true;
}
@@ -654,75 +509,72 @@ bool ChineseDictionaryDialog::isEditFieldsContentEqualsSelectedListContent() con
const DictionaryList& ChineseDictionaryDialog::getActiveDictionary() const
{
if( m_pRB_To_Traditional->IsChecked() )
return *m_pCT_DictionaryToTraditional;
return *m_pCT_DictionaryToSimplified;
if( m_xRB_To_Traditional->get_active() )
return *m_xCT_DictionaryToTraditional;
return *m_xCT_DictionaryToSimplified;
}
DictionaryList& ChineseDictionaryDialog::getActiveDictionary()
{
if( m_pRB_To_Traditional->IsChecked() )
return *m_pCT_DictionaryToTraditional;
return *m_pCT_DictionaryToSimplified;
if( m_xRB_To_Traditional->get_active() )
return *m_xCT_DictionaryToTraditional;
return *m_xCT_DictionaryToSimplified;
}
const DictionaryList& ChineseDictionaryDialog::getReverseDictionary() const
{
if( m_pRB_To_Traditional->IsChecked() )
return *m_pCT_DictionaryToSimplified;
return *m_pCT_DictionaryToTraditional;
if( m_xRB_To_Traditional->get_active() )
return *m_xCT_DictionaryToSimplified;
return *m_xCT_DictionaryToTraditional;
}
DictionaryList& ChineseDictionaryDialog::getReverseDictionary()
{
if( m_pRB_To_Traditional->IsChecked() )
return *m_pCT_DictionaryToSimplified;
return *m_pCT_DictionaryToTraditional;
if( m_xRB_To_Traditional->get_active() )
return *m_xCT_DictionaryToSimplified;
return *m_xCT_DictionaryToTraditional;
}
void ChineseDictionaryDialog::updateButtons()
{
bool bAdd = isEditFieldsHaveContent() && !getActiveDictionary().hasTerm( m_pED_Term->GetText() );
m_pPB_Add->Enable( bAdd );
bool bAdd = isEditFieldsHaveContent() && !getActiveDictionary().hasTerm(m_xED_Term->get_text());
m_xPB_Add->set_sensitive( bAdd );
m_pPB_Delete->Enable( !bAdd && getActiveDictionary().GetSelectedRowCount()>0 );
// DictionaryEntry* pFirstSelectedEntry = getActiveDictionary().getFirstSelectedEntry();
m_xPB_Delete->set_sensitive(!bAdd && getActiveDictionary().get_selected_index() != -1);
bool bModify = false;
{
DictionaryEntry* pFirstSelectedEntry = getActiveDictionary().getFirstSelectedEntry();
bModify = !bAdd && getActiveDictionary().GetSelectedRowCount()==1
&& pFirstSelectedEntry && pFirstSelectedEntry->m_aTerm == m_pED_Term->GetText();
bModify = !bAdd && pFirstSelectedEntry && pFirstSelectedEntry->m_aTerm == m_xED_Term->get_text();
if( bModify && isEditFieldsContentEqualsSelectedListContent() )
bModify = false;
}
m_pPB_Modify->Enable( bModify );
m_xPB_Modify->set_sensitive( bModify );
}
IMPL_LINK_NOARG(ChineseDictionaryDialog, AddHdl, Button*, void)
IMPL_LINK_NOARG(ChineseDictionaryDialog, AddHdl, weld::Button&, void)
{
if( !isEditFieldsHaveContent() )
return;
sal_Int16 nConversionPropertyType = m_pLB_Property->GetSelectedEntryPos()+1;
sal_Int16 nConversionPropertyType = m_xLB_Property->get_active() + 1;
getActiveDictionary().addEntry( m_pED_Term->GetText(), m_pED_Mapping->GetText(), nConversionPropertyType );
getActiveDictionary().addEntry( m_xED_Term->get_text(), m_xED_Mapping->get_text(), nConversionPropertyType );
if( m_pCB_Reverse->IsChecked() )
if( m_xCB_Reverse->get_active() )
{
getReverseDictionary().deleteEntries( m_pED_Mapping->GetText() );
getReverseDictionary().addEntry( m_pED_Mapping->GetText(), m_pED_Term->GetText(), nConversionPropertyType );
getReverseDictionary().deleteEntries( m_xED_Mapping->get_text() );
getReverseDictionary().addEntry( m_xED_Mapping->get_text(), m_xED_Term->get_text(), nConversionPropertyType );
}
updateButtons();
}
IMPL_LINK_NOARG(ChineseDictionaryDialog, ModifyHdl, Button*, void)
IMPL_LINK_NOARG(ChineseDictionaryDialog, ModifyHdl, weld::Button&, void)
{
OUString aTerm( m_pED_Term->GetText() );
OUString aMapping( m_pED_Mapping->GetText() );
sal_Int16 nConversionPropertyType = m_pLB_Property->GetSelectedEntryPos()+1;
OUString aTerm( m_xED_Term->get_text() );
OUString aMapping( m_xED_Mapping->get_text() );
sal_Int16 nConversionPropertyType = m_xLB_Property->get_active() + 1;
DictionaryList& rActive = getActiveDictionary();
DictionaryList& rReverse = getReverseDictionary();
@@ -735,7 +587,7 @@ IMPL_LINK_NOARG(ChineseDictionaryDialog, ModifyHdl, Button*, void)
{
if( pE->m_aMapping != aMapping || pE->m_nConversionPropertyType != nConversionPropertyType )
{
if( m_pCB_Reverse->IsChecked() )
if( m_xCB_Reverse->get_active() )
{
rReverse.deleteEntries( pE->m_aMapping );
sal_uIntPtr nPos = rReverse.deleteEntries( aMapping );
@@ -750,86 +602,84 @@ IMPL_LINK_NOARG(ChineseDictionaryDialog, ModifyHdl, Button*, void)
updateButtons();
}
IMPL_LINK_NOARG(ChineseDictionaryDialog, DeleteHdl, Button*, void)
IMPL_LINK_NOARG(ChineseDictionaryDialog, DeleteHdl, weld::Button&, void)
{
DictionaryList& rActive = getActiveDictionary();
DictionaryList& rReverse = getReverseDictionary();
if( rActive.GetSelectedRowCount()>0)
int nEntry = rActive.get_selected_index();
if (nEntry != -1)
{
DictionaryEntry* pEntry;
OUString aMapping;
for( sal_Int32 nN=rActive.GetRowCount(); nN--; )
DictionaryEntry* pEntry = rActive.getEntryOnPos(nEntry);
if (pEntry)
{
if( rActive.IsRowSelected( nN ) )
{
pEntry = rActive.getEntryOnPos( nN );
if(pEntry)
{
aMapping = pEntry->m_aMapping;
rActive.deleteEntryOnPos( nN );
if( m_pCB_Reverse->IsChecked() )
rReverse.deleteEntries( aMapping );
}
break;
}
OUString aMapping = pEntry->m_aMapping;
rActive.deleteEntryOnPos(nEntry);
if (m_xCB_Reverse->get_active())
rReverse.deleteEntries(aMapping);
}
}
updateButtons();
}
short ChineseDictionaryDialog::Execute()
short ChineseDictionaryDialog::run()
{
sal_Int32 nTextConversionOptions = m_nTextConversionOptions;
if(m_nTextConversionOptions & i18n::TextConversionOption::USE_CHARACTER_VARIANTS )
nTextConversionOptions = nTextConversionOptions^i18n::TextConversionOption::USE_CHARACTER_VARIANTS ;
m_pCT_DictionaryToSimplified->refillFromDictionary( nTextConversionOptions );
m_pCT_DictionaryToTraditional->refillFromDictionary( m_nTextConversionOptions );
m_xCT_DictionaryToSimplified->refillFromDictionary( nTextConversionOptions );
m_xCT_DictionaryToTraditional->refillFromDictionary( m_nTextConversionOptions );
short nRet = ModalDialog::Execute();
short nRet = GenericDialogController::run();
if( nRet == RET_OK )
{
//save settings to configuration
SvtLinguConfig aLngCfg;
aLngCfg.SetProperty( OUString( UPN_IS_REVERSE_MAPPING ), uno::Any(m_pCB_Reverse->IsChecked()) );
aLngCfg.SetProperty( OUString( UPN_IS_REVERSE_MAPPING ), uno::Any(m_xCB_Reverse->get_active()) );
m_pCT_DictionaryToSimplified->save();
m_pCT_DictionaryToTraditional->save();
m_xCT_DictionaryToSimplified->save();
m_xCT_DictionaryToTraditional->save();
}
m_pCT_DictionaryToSimplified->deleteAll();
m_pCT_DictionaryToTraditional->deleteAll();
m_xCT_DictionaryToSimplified->deleteAll();
m_xCT_DictionaryToTraditional->deleteAll();
return nRet;
}
IMPL_LINK(ChineseDictionaryDialog, HeaderBarClick, HeaderBar*, pHeaderBar, void)
void ChineseDictionaryDialog::HeaderBarClick(DictionaryList& rList, int nColumn)
{
sal_uInt16 nId = pHeaderBar->GetCurItemId();
HeaderBarItemBits nBits = pHeaderBar->GetItemBits(nId);
if( nBits & HeaderBarItemBits::CLICKABLE )
{
//set new arrow positions in headerbar
pHeaderBar->SetItemBits( getActiveDictionary().getSortColumn()+1, HEADER_BAR_BITS );
if( nBits & HeaderBarItemBits::UPARROW )
pHeaderBar->SetItemBits( nId, HEADER_BAR_BITS | HeaderBarItemBits::DOWNARROW );
else
pHeaderBar->SetItemBits( nId, HEADER_BAR_BITS | HeaderBarItemBits::UPARROW );
bool bSortAtoZ = rList.get_sort_order();
//sort lists
nBits = pHeaderBar->GetItemBits(nId);
bool bSortAtoZ = bool(nBits & HeaderBarItemBits::UPARROW);
getActiveDictionary().sortByColumn(nId-1,bSortAtoZ);
getReverseDictionary().sortByColumn(nId-1,bSortAtoZ);
//set new arrow positions in headerbar
if (nColumn == rList.get_sort_column())
{
bSortAtoZ = !bSortAtoZ;
rList.set_sort_order(bSortAtoZ);
}
else
{
rList.set_sort_indicator(TRISTATE_INDET, rList.get_sort_column());
rList.set_sort_column(nColumn);
}
//sort lists
rList.set_sort_indicator(bSortAtoZ ? TRISTATE_TRUE : TRISTATE_FALSE, nColumn);
}
IMPL_LINK(ChineseDictionaryDialog, ToSimplifiedHeaderBarClick, int, nColumn, void)
{
HeaderBarClick(*m_xCT_DictionaryToSimplified, nColumn);
}
IMPL_LINK(ChineseDictionaryDialog, ToTraditionalHeaderBarClick, int, nColumn, void)
{
HeaderBarClick(*m_xCT_DictionaryToTraditional, nColumn);
}
} //end namespace
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/source/unodialogs/textconversiondlgs/chinese_dictionarydialog.hxx b/svx/source/unodialogs/textconversiondlgs/chinese_dictionarydialog.hxx
index 8904626f..fd4fe0b 100644
--- a/svx/source/unodialogs/textconversiondlgs/chinese_dictionarydialog.hxx
+++ b/svx/source/unodialogs/textconversiondlgs/chinese_dictionarydialog.hxx
@@ -20,22 +20,15 @@
#ifndef INCLUDED_SVX_SOURCE_UNODIALOGS_TEXTCONVERSIONDLGS_CHINESE_DICTIONARYDIALOG_HXX
#define INCLUDED_SVX_SOURCE_UNODIALOGS_TEXTCONVERSIONDLGS_CHINESE_DICTIONARYDIALOG_HXX
#include <vcl/dialog.hxx>
#include <vcl/fixed.hxx>
#include <vcl/button.hxx>
#include <vcl/edit.hxx>
#include <vcl/lstbox.hxx>
#include <svtools/simptabl.hxx>
#include <vcl/weld.hxx>
#include <com/sun/star/uno/XComponentContext.hpp>
#include <com/sun/star/linguistic2/XConversionDictionary.hpp>
#include <vector>
namespace textconversiondlgs
{
struct DictionaryEntry final
{
DictionaryEntry( const OUString& rTerm, const OUString& rMapping
@@ -51,16 +44,13 @@ struct DictionaryEntry final
bool const m_bNewEntry;
};
class DictionaryList : public SvSimpleTable
class DictionaryList
{
public:
DictionaryList(SvSimpleTableContainer& rParent, WinBits nBits);
virtual ~DictionaryList() override;
virtual void dispose() override;
DictionaryList(std::unique_ptr<weld::TreeView> xTreeView);
void init(const css::uno::Reference< css::linguistic2::XConversionDictionary>& xDictionary,
vcl::Window *pED_Term, vcl::Window *pED_Mapping, ListBox *pLB_Property,
vcl::Window const *pFT_Term, vcl::Window const *pFT_Mapping, vcl::Window const *pFT_Property);
weld::Entry *pED_Term, weld::Entry *pED_Mapping, weld::ComboBox *pLB_Property);
void deleteAll();
void refillFromDictionary( sal_Int32 nTextConversionOptions /*i18n::TextConversionOption*/ );
@@ -70,8 +60,8 @@ public:
bool hasTerm( const OUString& rTerm ) const;
void addEntry( const OUString& rTerm, const OUString& rMapping
, sal_Int16 nConversionPropertyType /*linguistic2::ConversionPropertyType*/, sal_uIntPtr nPos = TREELIST_APPEND );
sal_uIntPtr deleteEntries( const OUString& rTerm ); //return lowest position of deleted entries or LIST_APPEND if no entry was deleted
, sal_Int16 nConversionPropertyType /*linguistic2::ConversionPropertyType*/, int nPos = -1);
int deleteEntries( const OUString& rTerm ); //return lowest position of deleted entries or -1 if no entry was deleted
void deleteEntryOnPos( sal_Int32 nPos );
DictionaryEntry* getEntryOnPos( sal_Int32 nPos ) const;
DictionaryEntry* getFirstSelectedEntry() const;
@@ -79,52 +69,64 @@ public:
void sortByColumn( sal_uInt16 nSortColumnIndex, bool bSortAtoZ );
sal_uInt16 getSortColumn() const { return m_nSortColumnIndex;}
void set_size_request(int nWidth, int nHeight) { m_xControl->set_size_request(nWidth, nHeight); }
void hide() { m_xControl->hide(); }
void show() { m_xControl->show(); }
void connect_changed(const Link<weld::TreeView&, void>& rLink) { m_xControl->connect_changed(rLink); }
void connect_column_clicked(const Link<int, void>& rLink) { m_xControl->connect_column_clicked(rLink); }
bool get_sort_order() const { return m_xControl->get_sort_order(); }
void set_sort_order(bool bAscending) { return m_xControl->set_sort_order(bAscending); }
void set_sort_column(int nColumn) { return m_xControl->set_sort_column(nColumn); }
int get_sort_column() const { return m_xControl->get_sort_column(); }
int get_selected_index() const { return m_xControl->get_selected_index(); }
int get_height_rows(int nRows) const { return m_xControl->get_height_rows(nRows); }
bool get_visible() const { return m_xControl->get_visible(); }
void set_sort_indicator(TriState eState, int nColumn) { m_xControl->set_sort_indicator(eState, nColumn); }
weld::TreeView& get_widget() const { return *m_xControl; }
private:
OUString getPropertyTypeName( sal_Int16 nConversionPropertyType /*linguistic2::ConversionPropertyType*/ ) const;
OUString makeTabString( const DictionaryEntry& rEntry ) const;
DECL_LINK( CompareHdl, const SvSortData&, sal_Int32 );
sal_Int32 ColumnCompare( SvTreeListEntry* pLeft, SvTreeListEntry* pRight );
SvLBoxItem* getItemAtColumn( SvTreeListEntry* pEntry, sal_uInt16 nColumn ) const;
void setColSizes();
virtual void Resize() override;
DECL_LINK(ResizeHdl, const Size&, void);
public:
css::uno::Reference<css::linguistic2::XConversionDictionary> m_xDictionary;
private:
VclPtr<vcl::Window> m_pED_Term;
VclPtr<vcl::Window> m_pED_Mapping;
VclPtr<ListBox> m_pLB_Property;
std::unique_ptr<weld::TreeView> m_xControl;
std::unique_ptr<weld::TreeIter> m_xIter;
weld::Entry* m_pED_Term;
weld::Entry* m_pED_Mapping;
weld::ComboBox* m_pLB_Property;
std::vector< DictionaryEntry* > m_aToBeDeleted;
sal_uInt16 m_nSortColumnIndex;
};
class ChineseDictionaryDialog : public ModalDialog
class ChineseDictionaryDialog : public weld::GenericDialogController
{
public:
explicit ChineseDictionaryDialog( vcl::Window* pParent );
explicit ChineseDictionaryDialog(weld::Window* pParent);
virtual ~ChineseDictionaryDialog() override;
virtual void dispose() override;
//this method should be called once before calling execute
void setDirectionAndTextConversionOptions( bool bDirectionToSimplified, sal_Int32 nTextConversionOptions /*i18n::TextConversionOption*/ );
virtual short Execute() override;
virtual short run() override;
private:
DECL_LINK( DirectionHdl, Button*, void );
DECL_LINK( EditFieldsHdl, Edit&, void );
DECL_LINK( EditFieldsListBoxHdl, ListBox&, void );
DECL_LINK( MappingSelectHdl, SvTreeListBox*, void );
DECL_LINK( AddHdl, Button*, void );
DECL_LINK( ModifyHdl, Button*, void );
DECL_LINK( DeleteHdl, Button*, void );
DECL_LINK( HeaderBarClick, HeaderBar*, void );
DECL_LINK( DirectionHdl, weld::Button&, void );
DECL_LINK( EditFieldsHdl, weld::Entry&, void );
DECL_LINK( EditFieldsListBoxHdl, weld::ComboBox&, void );
DECL_LINK( MappingSelectHdl, weld::TreeView&, void );
DECL_LINK( AddHdl, weld::Button&, void );
DECL_LINK( ModifyHdl, weld::Button&, void );
DECL_LINK( DeleteHdl, weld::Button&, void );
static void HeaderBarClick(DictionaryList& rList, int nColumn);
DECL_LINK(ToSimplifiedHeaderBarClick, int, void);
DECL_LINK(ToTraditionalHeaderBarClick, int, void);
DECL_LINK(SizeAllocHdl, const Size&, void);
void initDictionaryControl(DictionaryList *pList,
const css::uno::Reference< css::linguistic2::XConversionDictionary>& xDictionary);
@@ -144,30 +146,28 @@ private:
private:
sal_Int32 m_nTextConversionOptions; //i18n::TextConversionOption
VclPtr<RadioButton> m_pRB_To_Simplified;
VclPtr<RadioButton> m_pRB_To_Traditional;
VclPtr<CheckBox> m_pCB_Reverse;
VclPtr<FixedText> m_pFT_Term;
VclPtr<Edit> m_pED_Term;
VclPtr<FixedText> m_pFT_Mapping;
VclPtr<Edit> m_pED_Mapping;
VclPtr<FixedText> m_pFT_Property;
VclPtr<ListBox> m_pLB_Property;
VclPtr<SvSimpleTableContainer> mpToSimplifiedContainer;
VclPtr<DictionaryList> m_pCT_DictionaryToSimplified;
VclPtr<SvSimpleTableContainer> mpToTraditionalContainer;
VclPtr<DictionaryList> m_pCT_DictionaryToTraditional;
VclPtr<PushButton> m_pPB_Add;
VclPtr<PushButton> m_pPB_Modify;
VclPtr<PushButton> m_pPB_Delete;
css::uno::Reference<css::uno::XComponentContext> m_xContext;
std::unique_ptr<weld::RadioButton> m_xRB_To_Simplified;
std::unique_ptr<weld::RadioButton> m_xRB_To_Traditional;
std::unique_ptr<weld::CheckButton> m_xCB_Reverse;
std::unique_ptr<weld::Label> m_xFT_Term;
std::unique_ptr<weld::Entry> m_xED_Term;
std::unique_ptr<weld::Label> m_xFT_Mapping;
std::unique_ptr<weld::Entry> m_xED_Mapping;
std::unique_ptr<weld::Label> m_xFT_Property;
std::unique_ptr<weld::ComboBox> m_xLB_Property;
std::unique_ptr<DictionaryList> m_xCT_DictionaryToSimplified;
std::unique_ptr<DictionaryList> m_xCT_DictionaryToTraditional;
std::unique_ptr<weld::Button> m_xPB_Add;
std::unique_ptr<weld::Button> m_xPB_Modify;
std::unique_ptr<weld::Button> m_xPB_Delete;
};
diff --git a/svx/source/unodialogs/textconversiondlgs/chinese_translation_unodialog.cxx b/svx/source/unodialogs/textconversiondlgs/chinese_translation_unodialog.cxx
index 048b840..004f595 100644
--- a/svx/source/unodialogs/textconversiondlgs/chinese_translation_unodialog.cxx
+++ b/svx/source/unodialogs/textconversiondlgs/chinese_translation_unodialog.cxx
@@ -32,8 +32,7 @@ namespace textconversiondlgs
using namespace ::com::sun::star;
ChineseTranslation_UnoDialog::ChineseTranslation_UnoDialog()
: m_pDialog( nullptr )
, m_bDisposed(false)
: m_bDisposed(false)
, m_bInDispose(false)
, m_aContainerMutex()
, m_aDisposeEventListeners(m_aContainerMutex)
@@ -48,11 +47,10 @@ ChineseTranslation_UnoDialog::~ChineseTranslation_UnoDialog()
void ChineseTranslation_UnoDialog::impl_DeleteDialog()
{
if( m_pDialog )
if (m_xDialog)
{
if(m_pDialog->IsInExecute())
m_pDialog->EndDialog();
m_pDialog.disposeAndClear();
m_xDialog->response(RET_CANCEL);
m_xDialog.reset();
}
}
@@ -110,39 +108,23 @@ void SAL_CALL ChineseTranslation_UnoDialog::initialize( const uno::Sequence< uno
}
}
sal_Int16 SAL_CALL ChineseTranslation_UnoDialog::execute()
{
sal_Int16 nRet = ui::dialogs::ExecutableDialogResults::CANCEL;
{
SolarMutexGuard aSolarGuard;
if( m_bDisposed || m_bInDispose )
if (m_bDisposed || m_bInDispose)
return nRet;
if( !m_pDialog )
{
vcl::Window* pParent = nullptr;
if( m_xParentWindow.is() )
{
VCLXWindow* pImplementation = VCLXWindow::GetImplementation(m_xParentWindow);
if (pImplementation)
pParent = pImplementation->GetWindow().get();
}
uno::Reference< XComponent > xComp( this );
m_pDialog = VclPtr<ChineseTranslationDialog>::Create( pParent );
}
if( !m_pDialog )
return nRet;
nRet = m_pDialog->Execute();
if(nRet==RET_OK)
if (!m_xDialog)
m_xDialog.reset(new ChineseTranslationDialog(Application::GetFrameWeld(m_xParentWindow)));
nRet = m_xDialog->run();
if (nRet == RET_OK)
nRet=ui::dialogs::ExecutableDialogResults::OK;
}
return nRet;
}
// lang::XComponent
void SAL_CALL ChineseTranslation_UnoDialog::dispose()
{
lang::EventObject aEvt;
@@ -185,11 +167,13 @@ uno::Reference< beans::XPropertySetInfo > SAL_CALL ChineseTranslation_UnoDialog:
{
return nullptr;
}
void SAL_CALL ChineseTranslation_UnoDialog::setPropertyValue( const OUString&, const uno::Any& )
{
//only read only properties
throw beans::PropertyVetoException();
}
uno::Any SAL_CALL ChineseTranslation_UnoDialog::getPropertyValue( const OUString& rPropertyName )
{
uno::Any aRet;
@@ -199,9 +183,9 @@ uno::Any SAL_CALL ChineseTranslation_UnoDialog::getPropertyValue( const OUString
{
SolarMutexGuard aSolarGuard;
if( m_bDisposed || m_bInDispose || !m_pDialog )
if (m_bDisposed || m_bInDispose || !m_xDialog)
return aRet;
m_pDialog->getSettings( bDirectionToSimplified, bTranslateCommonTerms );
m_xDialog->getSettings(bDirectionToSimplified, bTranslateCommonTerms);
}
if( rPropertyName == "IsDirectionToSimplified" )
@@ -223,25 +207,27 @@ uno::Any SAL_CALL ChineseTranslation_UnoDialog::getPropertyValue( const OUString
return aRet;
}
void SAL_CALL ChineseTranslation_UnoDialog::addPropertyChangeListener( const OUString& , const uno::Reference< beans::XPropertyChangeListener >& )
{
//only not bound properties -> ignore listener
}
void SAL_CALL ChineseTranslation_UnoDialog::removePropertyChangeListener( const OUString& , const uno::Reference< beans::XPropertyChangeListener >& )
{
//only not bound properties -> ignore listener
}
void SAL_CALL ChineseTranslation_UnoDialog::addVetoableChangeListener( const OUString& , const uno::Reference< beans::XVetoableChangeListener >& )
{
//only not bound properties -> ignore listener
}
void SAL_CALL ChineseTranslation_UnoDialog::removeVetoableChangeListener( const OUString& , const uno::Reference< beans::XVetoableChangeListener >& )
{
//only not bound properties -> ignore listener
}
} //end namespace
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/source/unodialogs/textconversiondlgs/chinese_translation_unodialog.hxx b/svx/source/unodialogs/textconversiondlgs/chinese_translation_unodialog.hxx
index cd73f09..ab7d204 100644
--- a/svx/source/unodialogs/textconversiondlgs/chinese_translation_unodialog.hxx
+++ b/svx/source/unodialogs/textconversiondlgs/chinese_translation_unodialog.hxx
@@ -114,7 +114,7 @@ private:
css::uno::Reference<
css::awt::XWindow > m_xParentWindow;
VclPtr<ChineseTranslationDialog> m_pDialog;
std::unique_ptr<ChineseTranslationDialog> m_xDialog;
bool m_bDisposed; ///Dispose call ready.
bool m_bInDispose;///In dispose call
diff --git a/svx/source/unodialogs/textconversiondlgs/chinese_translationdialog.cxx b/svx/source/unodialogs/textconversiondlgs/chinese_translationdialog.cxx
index a6ac160..5175704 100644
--- a/svx/source/unodialogs/textconversiondlgs/chinese_translationdialog.cxx
+++ b/svx/source/unodialogs/textconversiondlgs/chinese_translationdialog.cxx
@@ -24,107 +24,70 @@
#include <unotools/lingucfg.hxx>
#include <unotools/linguprops.hxx>
namespace textconversiondlgs
{
using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;
ChineseTranslationDialog::ChineseTranslationDialog( vcl::Window* pParent )
: ModalDialog(pParent, "ChineseConversionDialog", "svx/ui/chineseconversiondialog.ui")
, m_pDictionaryDialog(nullptr)
ChineseTranslationDialog::ChineseTranslationDialog(weld::Window* pParent)
: GenericDialogController(pParent, "svx/ui/chineseconversiondialog.ui", "ChineseConversionDialog")
, m_xBP_OK(m_xBuilder->weld_button("ok"))
, m_xPB_Editterms(m_xBuilder->weld_button("editterms"))
, m_xRB_To_Simplified(m_xBuilder->weld_radio_button("tosimplified"))
, m_xRB_To_Traditional(m_xBuilder->weld_radio_button("totraditional"))
, m_xCB_Translate_Commonterms(m_xBuilder->weld_check_button("commonterms"))
{
get(m_pBP_OK, "ok");
get(m_pPB_Editterms, "editterms");
get(m_pRB_To_Simplified, "tosimplified");
get(m_pRB_To_Traditional, "totraditional");
get(m_pCB_Translate_Commonterms, "commonterms");
SvtLinguConfig aLngCfg;
bool bValue = false;
Any aAny( aLngCfg.GetProperty( OUString( UPN_IS_DIRECTION_TO_SIMPLIFIED ) ) );
aAny >>= bValue;
if( bValue )
m_pRB_To_Simplified->Check();
m_xRB_To_Simplified->set_active(true);
else
m_pRB_To_Traditional->Check();
m_xRB_To_Traditional->set_active(true);
aAny = aLngCfg.GetProperty( OUString( UPN_IS_TRANSLATE_COMMON_TERMS ) );
if( aAny >>= bValue )
m_pCB_Translate_Commonterms->Check( bValue );
m_xCB_Translate_Commonterms->set_active( bValue );
m_pPB_Editterms->SetClickHdl( LINK( this, ChineseTranslationDialog, DictionaryHdl ) );
m_pBP_OK->SetClickHdl( LINK( this, ChineseTranslationDialog, OkHdl ) );
m_xPB_Editterms->connect_clicked( LINK( this, ChineseTranslationDialog, DictionaryHdl ) );
m_xBP_OK->connect_clicked( LINK( this, ChineseTranslationDialog, OkHdl ) );
}
ChineseTranslationDialog::~ChineseTranslationDialog()
{
disposeOnce();
}
void ChineseTranslationDialog::dispose()
{
if(m_pDictionaryDialog)
{
if(m_pDictionaryDialog->IsInExecute())
m_pDictionaryDialog->EndDialog();
}
m_pDictionaryDialog.disposeAndClear();
m_pRB_To_Simplified.clear();
m_pRB_To_Traditional.clear();
m_pCB_Translate_Commonterms.clear();
m_pPB_Editterms.clear();
m_pBP_OK.clear();
ModalDialog::dispose();
}
void ChineseTranslationDialog::getSettings( bool& rbDirectionToSimplified
, bool& rbTranslateCommonTerms ) const
{
rbDirectionToSimplified = m_pRB_To_Simplified->IsChecked();
rbTranslateCommonTerms = m_pCB_Translate_Commonterms->IsChecked();
rbDirectionToSimplified = m_xRB_To_Simplified->get_active();
rbTranslateCommonTerms = m_xCB_Translate_Commonterms->get_active();
}
IMPL_LINK_NOARG(ChineseTranslationDialog, OkHdl, Button*, void)
IMPL_LINK_NOARG(ChineseTranslationDialog, OkHdl, weld::Button&, void)
{
//save settings to configuration
SvtLinguConfig aLngCfg;
Any aAny;
aAny <<= m_pRB_To_Simplified->IsChecked();
aAny <<= m_xRB_To_Simplified->get_active();
aLngCfg.SetProperty( OUString( UPN_IS_DIRECTION_TO_SIMPLIFIED ), aAny );
aAny <<= m_pCB_Translate_Commonterms->IsChecked();
aAny <<= m_xCB_Translate_Commonterms->get_active();
aLngCfg.SetProperty( OUString( UPN_IS_TRANSLATE_COMMON_TERMS ), aAny );
EndDialog( RET_OK );
m_xDialog->response(RET_OK);
}
IMPL_LINK_NOARG(ChineseTranslationDialog, DictionaryHdl, Button*, void)
IMPL_LINK_NOARG(ChineseTranslationDialog, DictionaryHdl, weld::Button&, void)
{
if( !m_pDictionaryDialog )
{
m_pDictionaryDialog = VclPtr<ChineseDictionaryDialog>::Create(this);
}
if( m_pDictionaryDialog )
{
if( m_pDictionaryDialog->IsInExecute() )
{
if( !m_pDictionaryDialog->IsReallyVisible() )
{
m_pDictionaryDialog->ToTop();
m_pDictionaryDialog->GrabFocusToFirstControl();
}
}
else
{
sal_Int32 nTextConversionOptions = i18n::TextConversionOption::NONE;
if( !m_pCB_Translate_Commonterms->IsChecked() )
nTextConversionOptions = nTextConversionOptions | i18n::TextConversionOption::CHARACTER_BY_CHARACTER;
m_pDictionaryDialog->setDirectionAndTextConversionOptions( m_pRB_To_Simplified->IsChecked(), nTextConversionOptions );
m_pDictionaryDialog->Execute();
}
}
if( !m_xDictionaryDialog )
m_xDictionaryDialog.reset(new ChineseDictionaryDialog(m_xDialog.get()));
sal_Int32 nTextConversionOptions = i18n::TextConversionOption::NONE;
if (!m_xCB_Translate_Commonterms->get_active())
nTextConversionOptions = nTextConversionOptions | i18n::TextConversionOption::CHARACTER_BY_CHARACTER;
m_xDictionaryDialog->setDirectionAndTextConversionOptions(m_xRB_To_Simplified->get_active(), nTextConversionOptions);
m_xDictionaryDialog->run();
}
diff --git a/svx/source/unodialogs/textconversiondlgs/chinese_translationdialog.hxx b/svx/source/unodialogs/textconversiondlgs/chinese_translationdialog.hxx
index 4fb45c9..7d0d018 100644
--- a/svx/source/unodialogs/textconversiondlgs/chinese_translationdialog.hxx
+++ b/svx/source/unodialogs/textconversiondlgs/chinese_translationdialog.hxx
@@ -20,44 +20,35 @@
#ifndef INCLUDED_SVX_SOURCE_UNODIALOGS_TEXTCONVERSIONDLGS_CHINESE_TRANSLATIONDIALOG_HXX
#define INCLUDED_SVX_SOURCE_UNODIALOGS_TEXTCONVERSIONDLGS_CHINESE_TRANSLATIONDIALOG_HXX
#include <vcl/dialog.hxx>
#include <vcl/fixed.hxx>
#include <vcl/button.hxx>
#include <vcl/weld.hxx>
namespace textconversiondlgs
{
class ChineseDictionaryDialog;
class ChineseTranslationDialog : public ModalDialog
class ChineseTranslationDialog : public weld::GenericDialogController
{
public:
explicit ChineseTranslationDialog( vcl::Window* pParent );
explicit ChineseTranslationDialog(weld::Window* pParent);
virtual ~ChineseTranslationDialog() override;
virtual void dispose() override;
void getSettings( bool& rbDirectionToSimplified
, bool& rbTranslateCommonTerms ) const;
private:
DECL_LINK( DictionaryHdl, Button*, void );
DECL_LINK( OkHdl, Button*, void );
DECL_LINK( DictionaryHdl, weld::Button&, void );
DECL_LINK( OkHdl, weld::Button&, void );
private:
VclPtr<RadioButton> m_pRB_To_Simplified;
VclPtr<RadioButton> m_pRB_To_Traditional;
VclPtr<CheckBox> m_pCB_Translate_Commonterms;
VclPtr<PushButton> m_pPB_Editterms;
VclPtr<OKButton> m_pBP_OK;
VclPtr<ChineseDictionaryDialog> m_pDictionaryDialog;
std::unique_ptr<weld::Button> m_xBP_OK;
std::unique_ptr<weld::Button> m_xPB_Editterms;
std::unique_ptr<weld::RadioButton> m_xRB_To_Simplified;
std::unique_ptr<weld::RadioButton> m_xRB_To_Traditional;
std::unique_ptr<weld::CheckButton> m_xCB_Translate_Commonterms;
std::unique_ptr<ChineseDictionaryDialog> m_xDictionaryDialog;
};
} //end namespace
#endif
diff --git a/svx/uiconfig/ui/chineseconversiondialog.ui b/svx/uiconfig/ui/chineseconversiondialog.ui
index 8bafe72..9e05a44 100644
--- a/svx/uiconfig/ui/chineseconversiondialog.ui
+++ b/svx/uiconfig/ui/chineseconversiondialog.ui
@@ -1,12 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.18.3 -->
<!-- Generated with glade 3.22.1 -->
<interface domain="svx">
<requires lib="gtk+" version="3.18"/>
<object class="GtkDialog" id="ChineseConversionDialog">
<property name="can_focus">False</property>
<property name="border_width">6</property>
<property name="title" translatable="yes" context="chineseconversiondialog|ChineseConversionDialog">Chinese Conversion</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>
@@ -108,7 +114,6 @@
<property name="xalign">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">totraditional</property>
</object>
<packing>
<property name="left_attach">0</property>
diff --git a/svx/uiconfig/ui/chinesedictionary.ui b/svx/uiconfig/ui/chinesedictionary.ui
index 39015bc..47cc1c4 100644
--- a/svx/uiconfig/ui/chinesedictionary.ui
+++ b/svx/uiconfig/ui/chinesedictionary.ui
@@ -1,13 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.18.3 -->
<!-- Generated with glade 3.22.1 -->
<interface domain="svx">
<requires lib="gtk+" version="3.18"/>
<requires lib="LibreOffice" version="1.0"/>
<object class="GtkDialog" id="ChineseDictionaryDialog">
<property name="can_focus">False</property>
<property name="border_width">6</property>
<property name="title" translatable="yes" context="chinesedictionary|ChineseDictionaryDialog">Edit Dictionary</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>
@@ -148,9 +153,9 @@
<object class="GtkLabel" id="termft">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="label" translatable="yes" context="chinesedictionary|termft">Term</property>
<property name="use_underline">True</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">0</property>
@@ -158,81 +163,19 @@
</packing>
</child>
<child>
<object class="GtkEntry" id="term">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="mappingft">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="label" translatable="yes" context="chinesedictionary|mappingft">Mapping</property>
<property name="use_underline">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="mapping">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="propertyft">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="label" translatable="yes" context="chinesedictionary|propertyft">Property</property>
<property name="use_underline">True</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="property">
<property name="visible">True</property>
<property name="can_focus">False</property>
<items>
<item translatable="yes" context="chinesedictionary|property">Other</item>
<item translatable="yes" context="chinesedictionary|property">Foreign</item>
<item translatable="yes" context="chinesedictionary|property">First name</item>
<item translatable="yes" context="chinesedictionary|property">Last name</item>
<item translatable="yes" context="chinesedictionary|property">Title</item>
<item translatable="yes" context="chinesedictionary|property">Status</item>
<item translatable="yes" context="chinesedictionary|property">Place name</item>
<item translatable="yes" context="chinesedictionary|property">Business</item>
<item translatable="yes" context="chinesedictionary|property">Adjective</item>
<item translatable="yes" context="chinesedictionary|property">Idiom</item>
<item translatable="yes" context="chinesedictionary|property">Abbreviation</item>
<item translatable="yes" context="chinesedictionary|property">Numerical</item>
<item translatable="yes" context="chinesedictionary|property">Noun</item>
<item translatable="yes" context="chinesedictionary|property">Verb</item>
<item translatable="yes" context="chinesedictionary|property">Brand name</item>
</items>
</object>
<packing>
<property name="left_attach">2</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkButtonBox" id="buttonbox1">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -289,38 +232,214 @@
</packing>
</child>
<child>
<object class="GtkGrid" id="grid3">
<object class="GtkLabel" id="propertyft">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="vexpand">True</property>
<property name="label" translatable="yes" context="chinesedictionary|propertyft">Property</property>
<property name="use_underline">True</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="GtkComboBoxText" id="property">
<property name="visible">True</property>
<property name="can_focus">False</property>
<items>
<item translatable="yes" context="chinesedictionary|property">Other</item>
<item translatable="yes" context="chinesedictionary|property">Foreign</item>
<item translatable="yes" context="chinesedictionary|property">First name</item>
<item translatable="yes" context="chinesedictionary|property">Last name</item>
<item translatable="yes" context="chinesedictionary|property">Title</item>
<item translatable="yes" context="chinesedictionary|property">Status</item>
<item translatable="yes" context="chinesedictionary|property">Place name</item>
<item translatable="yes" context="chinesedictionary|property">Business</item>
<item translatable="yes" context="chinesedictionary|property">Adjective</item>
<item translatable="yes" context="chinesedictionary|property">Idiom</item>
<item translatable="yes" context="chinesedictionary|property">Abbreviation</item>
<item translatable="yes" context="chinesedictionary|property">Numerical</item>
<item translatable="yes" context="chinesedictionary|property">Noun</item>
<item translatable="yes" context="chinesedictionary|property">Verb</item>
<item translatable="yes" context="chinesedictionary|property">Brand name</item>
</items>
</object>
<packing>
<property name="left_attach">2</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="mapping">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="term">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="svtlo-SvSimpleTableContainer" id="tradtosimpleview:border">
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="Simple Table Container-selection"/>
<property name="shadow_type">in</property>
<child>
<object class="GtkTreeView" id="tradtosimpleview">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="model">liststore3</property>
<property name="search_column">0</property>
<property name="show_expanders">False</property>
<child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn3">
<property name="resizable">True</property>
<property name="spacing">6</property>
<property name="title" translatable="yes" context="chinesedictionary|termft">Term</property>
<property name="clickable">True</property>
<property name="sort_indicator">True</property>
<child>
<object class="GtkCellRendererText" id="cellrenderer1"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn4">
<property name="resizable">True</property>
<property name="spacing">6</property>
<property name="title" translatable="yes" context="chinesedictionary|mappingft">Mapping</property>
<property name="clickable">True</property>
<child>
<object class="GtkCellRendererText" id="cellrenderer2"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn5">
<property name="resizable">True</property>
<property name="spacing">6</property>
<property name="title" translatable="yes" context="chinesedictionary|propertyft">Property</property>
<property name="clickable">True</property>
<child>
<object class="GtkCellRendererText" id="cellrenderer3"/>
<attributes>
<attribute name="text">2</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="svtlo-SvSimpleTableContainer" id="simpletotradview:border">
<object class="GtkScrolledWindow">
<property name="can_focus">True</property>
<property name="no_show_all">True</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="Simple Table Container-selection1"/>
<property name="shadow_type">in</property>
<child>
<object class="GtkTreeView" id="simpletotradview">
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="no_show_all">True</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="model">liststore2</property>
<property name="search_column">0</property>
<property name="show_expanders">False</property>
<child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn33">
<property name="resizable">True</property>
<property name="spacing">6</property>
<property name="title" translatable="yes" context="chinesedictionary|termft">Term</property>
<property name="reorderable">True</property>
<property name="sort_indicator">True</property>
<child>
<object class="GtkCellRendererText" id="cellrenderer11"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn44">
<property name="resizable">True</property>
<property name="spacing">6</property>
<property name="title" translatable="yes" context="chinesedictionary|mappingft">Mapping</property>
<property name="clickable">True</property>
<child>
<object class="GtkCellRendererText" id="cellrenderer22"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn55">
<property name="resizable">True</property>
<property name="spacing">6</property>
<property name="title" translatable="yes" context="chinesedictionary|propertyft">Property</property>
<property name="clickable">True</property>
<child>
<object class="GtkCellRendererText" id="cellrenderer33"/>
<attributes>
<attribute name="text">2</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
@@ -354,13 +473,6 @@
<action-widget response="-11">help</action-widget>
</action-widgets>
</object>
<object class="GtkSizeGroup" id="sizegroup1">
<property name="mode">both</property>
<widgets>
<widget name="tradtosimpleview:border"/>
<widget name="simpletotradview:border"/>
</widgets>
</object>
<object class="GtkSizeGroup" id="sizegroup2">
<widgets>
<widget name="termft"/>
@@ -379,4 +491,35 @@
<widget name="property"/>
</widgets>
</object>
<object class="GtkTreeStore" id="liststore2">
<columns>
<!-- column-name text -->
<column type="gchararray"/>
<!-- column-name text2 -->
<column type="gchararray"/>
<!-- column-name text3 -->
<column type="gchararray"/>
<!-- column-name id -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkTreeStore" id="liststore3">
<columns>
<!-- column-name text -->
<column type="gchararray"/>
<!-- column-name text2 -->
<column type="gchararray"/>
<!-- column-name text3 -->
<column type="gchararray"/>
<!-- column-name id -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkSizeGroup" id="sizegroup1">
<property name="mode">both</property>
<widgets>
<widget name="tradtosimpleview"/>
<widget name="simpletotradview"/>
</widgets>
</object>
</interface>
diff --git a/sw/source/ui/config/optload.cxx b/sw/source/ui/config/optload.cxx
index ee185cb..7844dc9 100644
--- a/sw/source/ui/config/optload.cxx
+++ b/sw/source/ui/config/optload.cxx
@@ -616,16 +616,16 @@ void SwCaptionOptPage::Reset( const SfxItemSet* rSet)
m_xCheckLB->clear(); // remove all entries
// Writer objects
sal_uLong nPos = 0;
m_xCheckLB->insert(nullptr, -1, nullptr, nullptr, nullptr, nullptr, nullptr, false);
int nPos = 0;
m_xCheckLB->append();
m_xCheckLB->set_toggle(nPos, false, 0);
m_xCheckLB->set_text(nPos, m_sSWTable, 1);
SetOptions(nPos++, TABLE_CAP);
m_xCheckLB->insert(nullptr, -1, nullptr, nullptr, nullptr, nullptr, nullptr, false);
m_xCheckLB->append();
m_xCheckLB->set_toggle(nPos, false, 0);
m_xCheckLB->set_text(nPos, m_sSWFrame, 1);
SetOptions(nPos++, FRAME_CAP);
m_xCheckLB->insert(nullptr, -1, nullptr, nullptr, nullptr, nullptr, nullptr, false);
m_xCheckLB->append();
m_xCheckLB->set_toggle(nPos, false, 0);
m_xCheckLB->set_text(nPos, m_sSWGraphic, 1);
SetOptions(nPos++, GRAPHIC_CAP);
@@ -650,7 +650,7 @@ void SwCaptionOptPage::Reset( const SfxItemSet* rSet)
sClass = aObjS[i].GetHumanName();
// don't show product version
sClass = sClass.replaceFirst( sComplete, sWithoutVersion );
m_xCheckLB->insert(nullptr, -1, nullptr, nullptr, nullptr, nullptr, nullptr, false);
m_xCheckLB->append();
m_xCheckLB->set_toggle(nPos, false, 0);
m_xCheckLB->set_text(nPos, sClass, 1);
SetOptions( nPos++, OLE_CAP, &rOleId );
diff --git a/sw/source/ui/index/cnttab.cxx b/sw/source/ui/index/cnttab.cxx
index ce4ca28..df1374c 100644
--- a/sw/source/ui/index/cnttab.cxx
+++ b/sw/source/ui/index/cnttab.cxx
@@ -787,10 +787,10 @@ SwTOXSelectTabPage::SwTOXSelectTabPage(TabPageParent pParent, const SfxItemSet&
for (size_t i = 0; i < SAL_N_ELEMENTS(RES_SRCTYPES); ++i)
{
OUString sId(OUString::number(static_cast<sal_uInt32>(RES_SRCTYPES[i].second)));
m_xFromObjCLB->insert(nullptr, -1, nullptr, &sId,
nullptr, nullptr, nullptr, false);
m_xFromObjCLB->append();
m_xFromObjCLB->set_toggle(i, false, 0);
m_xFromObjCLB->set_text(i, SwResId(RES_SRCTYPES[i].first), 1);
m_xFromObjCLB->set_id(i, sId);
}
SetExchangeSupport();
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index df7de95..827256c 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -2087,6 +2087,7 @@ private:
VclPtr<SvTabListBox> m_xTreeView;
SvLBoxButtonData m_aCheckButtonData;
SvLBoxButtonData m_aRadioButtonData;
int m_nSortColumn;
DECL_LINK(SelectHdl, SvTreeListBox*, void);
DECL_LINK(DoubleClickHdl, SvTreeListBox*, bool);
@@ -2095,12 +2096,14 @@ private:
DECL_LINK(HeaderBarClickedHdl, HeaderBar*, void);
DECL_LINK(ToggleHdl, SvLBoxButtonData*, void);
DECL_LINK(VisibleRangeChangedHdl, SvTreeListBox*, void);
DECL_LINK(CompareHdl, const SvSortData&, sal_Int32);
public:
SalInstanceTreeView(SvTabListBox* pTreeView, SalInstanceBuilder* pBuilder, bool bTakeOwnership)
: SalInstanceContainer(pTreeView, pBuilder, bTakeOwnership)
, m_xTreeView(pTreeView)
, m_aCheckButtonData(pTreeView, false)
, m_aRadioButtonData(pTreeView, true)
, m_nSortColumn(-1)
{
m_xTreeView->SetNodeDefaultImages();
m_xTreeView->SetSelectHdl(LINK(this, SalInstanceTreeView, SelectHdl));
@@ -2186,8 +2189,8 @@ public:
}
virtual void insert(weld::TreeIter* pParent, int pos, const OUString* pStr, const OUString* pId,
const OUString* pIconName, VirtualDevice* pImageSurface, const OUString* pExpanderName,
bool bChildrenOnDemand) override
const OUString* pIconName, VirtualDevice* pImageSurface,
const OUString* pExpanderName, bool bChildrenOnDemand, weld::TreeIter* pRet) override
{
SalInstanceTreeIter* pVclIter = static_cast<SalInstanceTreeIter*>(pParent);
SvTreeListEntry* iter = pVclIter ? pVclIter->iter : nullptr;
@@ -2224,6 +2227,12 @@ public:
m_xTreeView->SetCollapsedEntryBmp(pEntry, aImage);
}
if (pRet)
{
SalInstanceTreeIter* pVclRetIter = static_cast<SalInstanceTreeIter*>(pRet);
pVclRetIter->iter = pEntry;
}
if (bChildrenOnDemand)
{
m_xTreeView->InsertEntry("<dummy>", pEntry, false, 0, nullptr);
@@ -2455,11 +2464,16 @@ public:
return *pRet;
}
void set_id(SvTreeListEntry* pEntry, const OUString& rId)
{
m_aUserData.emplace_back(std::make_unique<OUString>(rId));
pEntry->SetUserData(m_aUserData.back().get());
}
virtual void set_id(int pos, const OUString& rId) override
{
SvTreeListEntry* pEntry = m_xTreeView->GetEntry(nullptr, pos);
m_aUserData.emplace_back(std::make_unique<OUString>(rId));
pEntry->SetUserData(m_aUserData.back().get());
set_id(pEntry, rId);
}
virtual int get_selected_index() const override
@@ -2644,6 +2658,12 @@ 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
{
const SalInstanceTreeIter& rVclIter = static_cast<const SalInstanceTreeIter&>(rIter);
@@ -2704,28 +2724,12 @@ public:
virtual void make_sorted() override
{
m_xTreeView->SetStyle(m_xTreeView->GetStyle() | WB_SORT);
m_xTreeView->GetModel()->SetCompareHdl(LINK(this, SalInstanceTreeView, CompareHdl));
set_sort_order(true);
}
virtual void set_sort_order(bool bAscending) override
{
SvHeaderTabListBox* pHeaderBox = dynamic_cast<SvHeaderTabListBox*>(m_xTreeView.get());
if (HeaderBar* pHeaderBar = pHeaderBox ? pHeaderBox->GetHeaderBar() : nullptr)
{
sal_uInt16 nTextId = pHeaderBar->GetItemId(0);
HeaderBarItemBits nBits = pHeaderBar->GetItemBits(nTextId);
if (nBits & HeaderBarItemBits::CLICKABLE)
{
nBits &= ~HeaderBarItemBits::UPARROW;
nBits &= ~HeaderBarItemBits::DOWNARROW;
if (bAscending)
nBits |= HeaderBarItemBits::DOWNARROW;
else
nBits |= HeaderBarItemBits::UPARROW;
pHeaderBar->SetItemBits(nTextId, nBits);
}
}
SvTreeList* pListModel = m_xTreeView->GetModel();
pListModel->SetSortMode(bAscending ? SortAscending : SortDescending);
pListModel->Resort();
@@ -2736,6 +2740,62 @@ public:
return m_xTreeView->GetModel()->GetSortMode() == SortAscending;
}
virtual void set_sort_indicator(TriState eState, int col) override
{
if (col == -1)
col = 0;
SvHeaderTabListBox* pHeaderBox = dynamic_cast<SvHeaderTabListBox*>(m_xTreeView.get());
if (HeaderBar* pHeaderBar = pHeaderBox ? pHeaderBox->GetHeaderBar() : nullptr)
{
sal_uInt16 nTextId = pHeaderBar->GetItemId(col);
HeaderBarItemBits nBits = pHeaderBar->GetItemBits(nTextId);
nBits &= ~HeaderBarItemBits::UPARROW;
nBits &= ~HeaderBarItemBits::DOWNARROW;
if (eState != TRISTATE_INDET)
{
if (eState == TRISTATE_TRUE)
nBits |= HeaderBarItemBits::DOWNARROW;
else
nBits |= HeaderBarItemBits::UPARROW;
}
pHeaderBar->SetItemBits(nTextId, nBits);
}
}
virtual TriState get_sort_indicator(int col) const override
{
if (col == -1)
col = 0;
SvHeaderTabListBox* pHeaderBox = dynamic_cast<SvHeaderTabListBox*>(m_xTreeView.get());
if (HeaderBar* pHeaderBar = pHeaderBox ? pHeaderBox->GetHeaderBar() : nullptr)
{
sal_uInt16 nTextId = pHeaderBar->GetItemId(col);
HeaderBarItemBits nBits = pHeaderBar->GetItemBits(nTextId);
if (nBits & HeaderBarItemBits::DOWNARROW)
return TRISTATE_TRUE;
if (nBits & HeaderBarItemBits::UPARROW)
return TRISTATE_FALSE;
}
return TRISTATE_INDET;
}
virtual int get_sort_column() const override
{
return m_nSortColumn;
}
virtual void set_sort_column(int nColumn) override
{
if (nColumn != m_nSortColumn)
{
m_nSortColumn = nColumn;
m_xTreeView->GetModel()->Resort();
}
}
SvTabListBox& getTreeView()
{
return *m_xTreeView;
@@ -2756,6 +2816,45 @@ public:
}
};
IMPL_LINK(SalInstanceTreeView, CompareHdl, const SvSortData&, rSortData, sal_Int32)
{
const SvTreeListEntry* pLHS = rSortData.pLeft;
const SvTreeListEntry* pRHS = rSortData.pRight;
assert(pLHS && pRHS);
const SvLBoxString* pLeftTextItem;
const SvLBoxString* pRightTextItem;
if (m_nSortColumn != -1)
{
size_t col = m_nSortColumn;
++col; //skip dummy/expander column
if (col < pLHS->ItemCount())
{
const SvLBoxString& rLeftTextItem = static_cast<const SvLBoxString&>(pLHS->GetItem(col));
pLeftTextItem = &rLeftTextItem;
}
else
pLeftTextItem = nullptr;
if (col < pRHS->ItemCount())
{
const SvLBoxString& rRightTextItem = static_cast<const SvLBoxString&>(pRHS->GetItem(col));
pRightTextItem = &rRightTextItem;
}
else
pRightTextItem = nullptr;
}
else
{
pLeftTextItem = static_cast<const SvLBoxString*>(pLHS->GetFirstItem(SvLBoxItemType::String));
pRightTextItem = static_cast<const SvLBoxString*>(pRHS->GetFirstItem(SvLBoxItemType::String));
}
return m_xTreeView->DefaultCompare(pLeftTextItem, pRightTextItem);
}
IMPL_LINK_NOARG(SalInstanceTreeView, VisibleRangeChangedHdl, SvTreeListBox*, void)
{
signal_visible_range_changed();
diff --git a/vcl/source/treelist/treelistbox.cxx b/vcl/source/treelist/treelistbox.cxx
index e306d7d..6c45fc3 100644
--- a/vcl/source/treelist/treelistbox.cxx
+++ b/vcl/source/treelist/treelistbox.cxx
@@ -3312,16 +3312,21 @@ void SvTreeListBox::RequestHelp( const HelpEvent& rHEvt )
Control::RequestHelp( rHEvt );
}
sal_Int32 SvTreeListBox::DefaultCompare(const SvLBoxString* pLeftText, const SvLBoxString* pRightText)
{
OUString aLeft = pLeftText ? pLeftText->GetText() : OUString();
OUString aRight = pRightText ? pRightText->GetText() : OUString();
pImpl->UpdateStringSorter();
return pImpl->m_pStringSorter->compare(aLeft, aRight);
}
IMPL_LINK( SvTreeListBox, DefaultCompare, const SvSortData&, rData, sal_Int32 )
{
const SvTreeListEntry* pLeft = rData.pLeft;
const SvTreeListEntry* pRight = rData.pRight;
const SvLBoxString* pLeftText = static_cast<const SvLBoxString*>(pLeft->GetFirstItem(SvLBoxItemType::String));
const SvLBoxString* pRightText = static_cast<const SvLBoxString*>(pRight->GetFirstItem(SvLBoxItemType::String));
OUString aLeft = pLeftText ? pLeftText->GetText() : OUString();
OUString aRight = pRightText ? pRightText->GetText() : OUString();
pImpl->UpdateStringSorter();
return pImpl->m_pStringSorter->compare(aLeft, aRight);
return DefaultCompare(pLeftText, pRightText);
}
void SvTreeListBox::ModelNotification( SvListAction nActionId, SvTreeListEntry* pEntry1,
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 84295d6..51b52a6 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -5155,8 +5155,11 @@ private:
std::vector<gulong> m_aColumnSignalIds;
// map from toggle column to toggle visibility column
std::map<int, int> m_aToggleVisMap;
std::vector<GtkSortType> m_aSavedSortTypes;
std::vector<int> m_aSavedSortColumns;
std::vector<int> m_aViewColToModelCol;
std::vector<int> m_aModelColToViewCol;
gint m_nTextCol;
gint m_nTextColHeader;
gint m_nImageCol;
gint m_nExpanderImageCol;
gint m_nIdCol;
@@ -5164,7 +5167,6 @@ private:
gulong m_nRowActivatedSignalId;
gulong m_nTestExpandRowSignalId;
gulong m_nVAdjustmentChangedSignalId;
GtkSortType m_eSortType;
DECL_LINK(async_signal_changed, void*, void);
@@ -5379,13 +5381,22 @@ private:
pThis->signal_visible_range_changed();
}
int get_model_col(int viewcol) const
{
return m_aViewColToModelCol[viewcol];
}
int get_view_col(int modelcol) const
{
return m_aModelColToViewCol[modelcol];
}
public:
GtkInstanceTreeView(GtkTreeView* pTreeView, GtkInstanceBuilder* pBuilder, bool bTakeOwnership)
: GtkInstanceContainer(GTK_CONTAINER(pTreeView), pBuilder, bTakeOwnership)
, m_pTreeView(pTreeView)
, m_pTreeStore(GTK_TREE_STORE(gtk_tree_view_get_model(m_pTreeView)))
, m_nTextCol(-1)
, m_nTextColHeader(-1)
, m_nImageCol(-1)
, m_nExpanderImageCol(-1)
, m_nChangedSignalId(g_signal_connect(gtk_tree_view_get_selection(pTreeView), "changed",
@@ -5393,10 +5404,9 @@ public:
, m_nRowActivatedSignalId(g_signal_connect(pTreeView, "row-activated", G_CALLBACK(signalRowActivated), this))
, m_nTestExpandRowSignalId(g_signal_connect(pTreeView, "test-expand-row", G_CALLBACK(signalTestExpandRow), this))
, m_nVAdjustmentChangedSignalId(0)
, m_eSortType(GTK_SORT_ASCENDING)
{
m_pColumns = gtk_tree_view_get_columns(m_pTreeView);
int nIndex(0), nHeader(0);
int nIndex(0);
for (GList* pEntry = g_list_first(m_pColumns); pEntry; pEntry = g_list_next(pEntry))
{
GtkTreeViewColumn* pColumn = GTK_TREE_VIEW_COLUMN(pEntry->data);
@@ -5408,7 +5418,6 @@ public:
if (m_nTextCol == -1 && GTK_IS_CELL_RENDERER_TEXT(pCellRenderer))
{
m_nTextCol = nIndex;
m_nTextColHeader = nHeader;
}
else if (GTK_IS_CELL_RENDERER_TOGGLE(pCellRenderer))
{
@@ -5424,10 +5433,11 @@ public:
else if (m_nImageCol == -1)
m_nImageCol = nIndex;
}
m_aModelColToViewCol.push_back(m_aViewColToModelCol.size());
++nIndex;
}
g_list_free(pRenderers);
++nHeader;
m_aViewColToModelCol.push_back(nIndex - 1);
}
m_nIdCol = nIndex++;
for (auto& a : m_aToggleVisMap)
@@ -5472,7 +5482,8 @@ public:
}
virtual void insert(weld::TreeIter* pParent, int pos, const OUString* pText, const OUString* pId, const OUString* pIconName,
VirtualDevice* pImageSurface, const OUString* pExpanderName, bool bChildrenOnDemand) override
VirtualDevice* pImageSurface, const OUString* pExpanderName,
bool bChildrenOnDemand, weld::TreeIter* pRet) override
{
disable_notify_events();
GtkTreeIter iter;
@@ -5484,6 +5495,11 @@ public:
OUString sDummy("<dummy>");
insert_row(subiter, &iter, -1, nullptr, &sDummy, nullptr, nullptr, nullptr);
}
if (pRet)
{
GtkInstanceTreeIter* pGtkRetIter = static_cast<GtkInstanceTreeIter*>(pRet);
pGtkRetIter->iter = iter;
}
enable_notify_events();
}
@@ -5560,18 +5576,66 @@ public:
virtual void set_sort_order(bool bAscending) override
{
m_eSortType = bAscending ? GTK_SORT_ASCENDING : GTK_SORT_DESCENDING;
GtkSortType eSortType = bAscending ? GTK_SORT_ASCENDING : GTK_SORT_DESCENDING;
gint sort_column_id(0);
GtkTreeSortable* pSortable = GTK_TREE_SORTABLE(m_pTreeStore);
gtk_tree_sortable_set_sort_column_id(pSortable, m_nTextCol, m_eSortType);
GtkTreeViewColumn* pColumn = GTK_TREE_VIEW_COLUMN(g_list_nth_data(m_pColumns, m_nTextColHeader));
assert(pColumn && "wrong count");
if (gtk_tree_view_column_get_sort_indicator(pColumn))
gtk_tree_view_column_set_sort_order(pColumn, m_eSortType);
gtk_tree_sortable_get_sort_column_id(pSortable, &sort_column_id, nullptr);
gtk_tree_sortable_set_sort_column_id(pSortable, sort_column_id, eSortType);
}
virtual bool get_sort_order() const override
{
return m_eSortType == GTK_SORT_ASCENDING;
GtkSortType eSortType;
GtkTreeSortable* pSortable = GTK_TREE_SORTABLE(m_pTreeStore);
gtk_tree_sortable_get_sort_column_id(pSortable, nullptr, &eSortType);
return eSortType == GTK_SORT_ASCENDING;
}
virtual void set_sort_indicator(TriState eState, int col) override
{
if (col == -1)
col = get_view_col(m_nTextCol);
GtkTreeViewColumn* pColumn = GTK_TREE_VIEW_COLUMN(g_list_nth_data(m_pColumns, col));
assert(pColumn && "wrong count");
if (eState == TRISTATE_INDET)
gtk_tree_view_column_set_sort_indicator(pColumn, false);
else
{
gtk_tree_view_column_set_sort_indicator(pColumn, true);
GtkSortType eSortType = eState == TRISTATE_TRUE ? GTK_SORT_ASCENDING : GTK_SORT_DESCENDING;
gtk_tree_view_column_set_sort_order(pColumn, eSortType);
}
}
virtual TriState get_sort_indicator(int col) const override
{
if (col == -1)
col = get_view_col(m_nTextCol);
GtkTreeViewColumn* pColumn = GTK_TREE_VIEW_COLUMN(g_list_nth_data(m_pColumns, col));
if (!gtk_tree_view_column_get_sort_indicator(pColumn))
return TRISTATE_INDET;
return gtk_tree_view_column_get_sort_order(pColumn) == GTK_SORT_ASCENDING ? TRISTATE_TRUE : TRISTATE_FALSE;
}
virtual int get_sort_column() const override
{
GtkTreeSortable* pSortable = GTK_TREE_SORTABLE(m_pTreeStore);
gint sort_column_id(0);
if (!gtk_tree_sortable_get_sort_column_id(pSortable, &sort_column_id, nullptr))
return -1;
return get_view_col(sort_column_id);
}
virtual void set_sort_column(int nColumn) override
{
GtkSortType eSortType;
GtkTreeSortable* pSortable = GTK_TREE_SORTABLE(m_pTreeStore);
gtk_tree_sortable_get_sort_column_id(pSortable, nullptr, &eSortType);
gtk_tree_sortable_set_sort_column_id(pSortable, get_model_col(nColumn), eSortType);
}
virtual int n_children() const override
@@ -5707,23 +5771,26 @@ public:
{
if (col == -1)
return get(pos, m_nTextCol);
return get(pos, col);
return get(pos, get_model_col(col));
}
virtual void set_text(int pos, const OUString& rText, int col) override
{
if (col == -1)
col = m_nTextCol;
else
col = get_model_col(col);
return set(pos, col, rText);
}
virtual bool get_toggle(int pos, int col) const override
{
return get_bool(pos, col);
return get_bool(pos, get_model_col(col));
}
virtual void set_toggle(int pos, bool bOn, int col) override
{
col = get_model_col(col);
// checkbuttons are invisible until toggled on or off
set(pos, m_aToggleVisMap[col], true);
return set(pos, col, bOn);
@@ -5959,6 +6026,8 @@ public:
const GtkInstanceTreeIter& rGtkIter = static_cast<const GtkInstanceTreeIter&>(rIter);
if (col == -1)
col = m_nTextCol;
else
col = get_model_col(col);
return get(rGtkIter.iter, col);
}
@@ -5967,18 +6036,21 @@ public:
GtkInstanceTreeIter& rGtkIter = static_cast<GtkInstanceTreeIter&>(rIter);
if (col == -1)
col = m_nTextCol;
else
col = get_model_col(col);
set(rGtkIter.iter, col, rText);
}
virtual OUString get_id(const weld::TreeIter& rIter) const override
{
const GtkInstanceTreeIter& rGtkIter = static_cast<const GtkInstanceTreeIter&>(rIter);
GtkTreeModel *pModel = GTK_TREE_MODEL(m_pTreeStore);
gchar* pStr;
gtk_tree_model_get(pModel, const_cast<GtkTreeIter*>(&rGtkIter.iter), m_nIdCol, &pStr, -1);
OUString sRet(pStr, pStr ? strlen(pStr) : 0, RTL_TEXTENCODING_UTF8);
g_free(pStr);
return sRet;
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
@@ -6000,8 +6072,14 @@ public:
gtk_tree_view_set_model(m_pTreeView, nullptr);
if (m_xSorter)
{
int nSortColumn;
GtkSortType eSortType;
GtkTreeSortable* pSortable = GTK_TREE_SORTABLE(m_pTreeStore);
gtk_tree_sortable_set_sort_column_id(pSortable, GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID, m_eSortType);
gtk_tree_sortable_get_sort_column_id(pSortable, &nSortColumn, &eSortType);
gtk_tree_sortable_set_sort_column_id(pSortable, GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID, eSortType);
m_aSavedSortColumns.push_back(nSortColumn);
m_aSavedSortTypes.push_back(eSortType);
}
enable_notify_events();
}
@@ -6012,7 +6090,9 @@ public:
if (m_xSorter)
{
GtkTreeSortable* pSortable = GTK_TREE_SORTABLE(m_pTreeStore);
gtk_tree_sortable_set_sort_column_id(pSortable, m_nTextCol, m_eSortType);
gtk_tree_sortable_set_sort_column_id(pSortable, m_aSavedSortColumns.back(), m_aSavedSortTypes.back());
m_aSavedSortTypes.pop_back();
m_aSavedSortColumns.pop_back();
}
gtk_tree_view_set_model(m_pTreeView, GTK_TREE_MODEL(m_pTreeStore));
GtkInstanceContainer::thaw();
@@ -6119,7 +6199,7 @@ public:
int starts_with(const OUString& rStr, int col, int nStartRow)
{
return ::starts_with(GTK_TREE_MODEL(m_pTreeStore), rStr, col, nStartRow);
return ::starts_with(GTK_TREE_MODEL(m_pTreeStore), rStr, get_model_col(col), nStartRow);
}
virtual void disable_notify_events() override
diff --git a/xmlsecurity/source/dialogs/certificatechooser.cxx b/xmlsecurity/source/dialogs/certificatechooser.cxx
index 4f04f0d..d6a552b 100644
--- a/xmlsecurity/source/dialogs/certificatechooser.cxx
+++ b/xmlsecurity/source/dialogs/certificatechooser.cxx
@@ -210,8 +210,7 @@ void CertificateChooser::ImplInitialize()
OUString sIssuer = xmlsec::GetContentPart( xCerts[ nC ]->getIssuerName() );
m_xCertLB->insert(nullptr, -1, nullptr, nullptr,
nullptr, nullptr, nullptr, false);
m_xCertLB->append();
int nRow = m_xCertLB->n_children() - 1;
m_xCertLB->set_text(nRow, xmlsec::GetContentPart(xCerts[nC]->getSubjectName()), 0);
m_xCertLB->set_text(nRow, sIssuer, 1);
diff --git a/xmlsecurity/source/dialogs/certificateviewer.cxx b/xmlsecurity/source/dialogs/certificateviewer.cxx
index 9f880ce..f48591b 100644
--- a/xmlsecurity/source/dialogs/certificateviewer.cxx
+++ b/xmlsecurity/source/dialogs/certificateviewer.cxx
@@ -374,7 +374,7 @@ void CertificateViewerCertPathTP::InsertCert(weld::TreeIter* pParent, const OUSt
OUString sImage = bValid ? OUStringLiteral(BMP_CERT_OK) : OUStringLiteral(BMP_CERT_NOT_OK);
maUserData.emplace_back(std::make_unique<CertPath_UserData>(rxCert, bValid));
OUString sId(OUString::number(reinterpret_cast<sal_Int64>(maUserData.back().get())));
mxCertPathLB->insert(pParent, -1, &rName, &sId, nullptr, nullptr, &sImage, false);
mxCertPathLB->insert(pParent, -1, &rName, &sId, nullptr, nullptr, &sImage, false, nullptr);
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx b/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx
index 4cde7de..9a3f8bf 100644
--- a/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx
+++ b/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx
@@ -619,7 +619,7 @@ void DigitalSignaturesDialog::ImplFillSignaturesBox()
}
m_xSignaturesLB->insert(nullptr, n, nullptr, nullptr,
&sImage, nullptr, nullptr, false);
&sImage, nullptr, nullptr, false, nullptr);
m_xSignaturesLB->set_text(n, aSubject, 1);
m_xSignaturesLB->set_text(n, aIssuer, 2);
m_xSignaturesLB->set_text(n, aDateTimeStr, 3);