summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2019-04-04 14:30:03 +0100
committerCaolán McNamara <caolanm@redhat.com>2019-04-06 19:53:00 +0200
commit5c32ba63163d9556ff89782a8074924cdf9dc554 (patch)
tree66acbb3b4c298c9f0cbff75f9e36bf3d759b7a0f
parent6f31c63e35abef03e6f938bbddc8778b70a62d43 (diff)
weld OTableSubscriptionPage
Change-Id: I55c23448480384c9a7d78cd55550bb4812ebde72 Reviewed-on: https://gerrit.libreoffice.org/70314 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--basctl/source/basicide/moduldl2.cxx4
-rw-r--r--basctl/source/dlged/managelang.cxx4
-rw-r--r--basctl/uiconfig/basicide/ui/defaultlanguage.ui2
-rw-r--r--basctl/uiconfig/basicide/ui/importlibdialog.ui2
-rw-r--r--cui/source/customize/SvxToolbarConfigPage.cxx14
-rw-r--r--cui/source/dialogs/hangulhanjadlg.cxx4
-rw-r--r--cui/source/dialogs/multipat.cxx14
-rw-r--r--cui/source/dialogs/srchxtra.cxx4
-rw-r--r--cui/source/inc/cfg.hxx2
-rw-r--r--cui/source/options/certpath.cxx12
-rw-r--r--cui/source/options/optlingu.cxx28
-rw-r--r--cui/source/tabpages/autocdlg.cxx174
-rw-r--r--cui/uiconfig/ui/accelconfigpage.ui8
-rw-r--r--cui/uiconfig/ui/acoroptionspage.ui2
-rw-r--r--cui/uiconfig/ui/applyautofmtpage.ui4
-rw-r--r--cui/uiconfig/ui/applylocalizedpage.ui6
-rw-r--r--cui/uiconfig/ui/certdialog.ui2
-rw-r--r--cui/uiconfig/ui/hangulhanjaoptdialog.ui2
-rw-r--r--cui/uiconfig/ui/menuassignpage.ui2
-rw-r--r--cui/uiconfig/ui/multipathdialog.ui2
-rw-r--r--cui/uiconfig/ui/optlingupage.ui6
-rw-r--r--cui/uiconfig/ui/searchattrdialog.ui2
-rw-r--r--cui/uiconfig/ui/smarttagoptionspage.ui2
-rw-r--r--dbaccess/source/ui/browser/unodatbr.cxx6
-rw-r--r--dbaccess/source/ui/control/dbtreelistbox.cxx2
-rw-r--r--dbaccess/source/ui/control/tabletree.cxx446
-rw-r--r--dbaccess/source/ui/dlg/tablespage.cxx254
-rw-r--r--dbaccess/source/ui/dlg/tablespage.hxx18
-rw-r--r--dbaccess/source/ui/inc/dbtreelistbox.hxx3
-rw-r--r--dbaccess/source/ui/inc/imageprovider.hxx13
-rw-r--r--dbaccess/source/ui/inc/tabletree.hxx123
-rw-r--r--dbaccess/source/ui/misc/imageprovider.cxx53
-rw-r--r--dbaccess/uiconfig/ui/tablesfilterpage.ui75
-rw-r--r--desktop/source/deployment/gui/dp_gui_updatedialog.cxx8
-rw-r--r--desktop/uiconfig/ui/updatedialog.ui2
-rw-r--r--include/vcl/svimpbox.hxx1
-rw-r--r--include/vcl/svlbitm.hxx5
-rw-r--r--include/vcl/treelistbox.hxx4
-rw-r--r--include/vcl/weld.hxx29
-rw-r--r--sc/source/ui/dbgui/dpgroupdlg.cxx6
-rw-r--r--sc/source/ui/dbgui/pvfundlg.cxx6
-rw-r--r--sc/source/ui/dbgui/tpsubt.cxx12
-rw-r--r--sc/source/ui/miscdlgs/protectiondlg.cxx10
-rw-r--r--sc/source/ui/miscdlgs/solveroptions.cxx4
-rw-r--r--sc/uiconfig/scalc/ui/datafieldoptionsdialog.ui2
-rw-r--r--sc/uiconfig/scalc/ui/groupbydate.ui2
-rw-r--r--sc/uiconfig/scalc/ui/protectsheetdlg.ui2
-rw-r--r--sc/uiconfig/scalc/ui/solveroptionsdialog.ui2
-rw-r--r--sc/uiconfig/scalc/ui/subtotalgrppage.ui2
-rw-r--r--sw/source/ui/config/optload.cxx19
-rw-r--r--sw/source/ui/index/cnttab.cxx29
-rw-r--r--sw/uiconfig/swriter/ui/assignstylesdialog.ui22
-rw-r--r--sw/uiconfig/swriter/ui/optcaptionpage.ui2
-rw-r--r--sw/uiconfig/swriter/ui/tocindexpage.ui2
-rw-r--r--vcl/source/app/salvtables.cxx145
-rw-r--r--vcl/source/treelist/svlbitm.cxx28
-rw-r--r--vcl/source/treelist/treelistbox.cxx27
-rw-r--r--vcl/unx/gtk3/gtk3gtkinst.cxx116
58 files changed, 1376 insertions, 406 deletions
diff --git a/basctl/source/basicide/moduldl2.cxx b/basctl/source/basicide/moduldl2.cxx
index 7494d288266b..9356357aa55f 100644
--- a/basctl/source/basicide/moduldl2.cxx
+++ b/basctl/source/basicide/moduldl2.cxx
@@ -795,7 +795,7 @@ void LibPage::InsertLib()
weld::TreeView& rView = xLibDlg->GetLibBox();
rView.append();
const int nRow = rView.n_children() - 1;
- rView.set_toggle(nRow, true, 0);
+ rView.set_toggle(nRow, TRISTATE_TRUE, 0);
rView.set_text(nRow, aLibName, 1);
}
}
@@ -829,7 +829,7 @@ void LibPage::InsertLib()
weld::TreeView& rView = xLibDlg->GetLibBox();
for (int nLib = 0, nChildren = rView.n_children(); nLib < nChildren; ++nLib)
{
- if (rView.get_toggle(nLib, 0))
+ if (rView.get_toggle(nLib, 0) == TRISTATE_TRUE)
{
OUString aLibName(rView.get_text(nLib, 1));
Reference< script::XLibraryContainer2 > xModLibContainer( m_aCurDocument.getLibraryContainer( E_SCRIPTS ), UNO_QUERY );
diff --git a/basctl/source/dlged/managelang.cxx b/basctl/source/dlged/managelang.cxx
index 33380b1cedec..d23563714196 100644
--- a/basctl/source/dlged/managelang.cxx
+++ b/basctl/source/dlged/managelang.cxx
@@ -275,7 +275,7 @@ void SetDefaultLanguageDialog::FillLanguageBox()
LanguageType eLang = m_xLanguageCB->get_id(j);
m_xCheckLangLB->append();
const int nRow = m_xCheckLangLB->n_children() - 1;
- m_xCheckLangLB->set_toggle(nRow, false, 0);
+ m_xCheckLangLB->set_toggle(nRow, TRISTATE_FALSE, 0);
m_xCheckLangLB->set_text(nRow, m_xLanguageCB->get_text(j), 1);
m_xCheckLangLB->set_id(nRow, OUString::number(eLang.get()));
}
@@ -311,7 +311,7 @@ Sequence< Locale > SetDefaultLanguageDialog::GetLocales() const
const sal_Int32 nCount = m_xCheckLangLB->n_children();
for (sal_Int32 i = 0; i < nCount; ++i)
{
- if (m_xCheckLangLB->get_toggle(i, 0))
+ if (m_xCheckLangLB->get_toggle(i, 0) == TRISTATE_TRUE)
{
LanguageType eType = LanguageType(m_xCheckLangLB->get_id(i).toUInt32());
aLocaleSeq.push_back(LanguageTag::convertToLocale(eType));
diff --git a/basctl/uiconfig/basicide/ui/defaultlanguage.ui b/basctl/uiconfig/basicide/ui/defaultlanguage.ui
index 59215e56e48b..9d6f90420613 100644
--- a/basctl/uiconfig/basicide/ui/defaultlanguage.ui
+++ b/basctl/uiconfig/basicide/ui/defaultlanguage.ui
@@ -12,6 +12,8 @@
<column type="gchararray"/>
<!-- column-name checkvis1 -->
<column type="gboolean"/>
+ <!-- column-name checktri1 -->
+ <column type="gboolean"/>
</columns>
</object>
<object class="GtkTreeStore" id="liststore2">
diff --git a/basctl/uiconfig/basicide/ui/importlibdialog.ui b/basctl/uiconfig/basicide/ui/importlibdialog.ui
index 6bde14b65152..a4480c52ac55 100644
--- a/basctl/uiconfig/basicide/ui/importlibdialog.ui
+++ b/basctl/uiconfig/basicide/ui/importlibdialog.ui
@@ -12,6 +12,8 @@
<column type="gchararray"/>
<!-- column-name checkvis1 -->
<column type="gboolean"/>
+ <!-- column-name checktri1 -->
+ <column type="gboolean"/>
</columns>
</object>
<object class="GtkDialog" id="ImportLibDialog">
diff --git a/cui/source/customize/SvxToolbarConfigPage.cxx b/cui/source/customize/SvxToolbarConfigPage.cxx
index 66a4d7278264..bd7a3333a4e7 100644
--- a/cui/source/customize/SvxToolbarConfigPage.cxx
+++ b/cui/source/customize/SvxToolbarConfigPage.cxx
@@ -605,7 +605,7 @@ IMPL_LINK(SvxToolbarConfigPage, ModifyItemHdl, const OString&, rIdent, void)
OUString sId(OUString::number(reinterpret_cast<sal_Int64>(pEntry)));
m_xContentsListBox->insert(nActEntry, sId);
- m_xContentsListBox->set_toggle(nActEntry, pEntry->IsVisible(), 0);
+ m_xContentsListBox->set_toggle(nActEntry, pEntry->IsVisible() ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
InsertEntryIntoUI(pEntry, nActEntry, 1);
m_xContentsListBox->select(nActEntry);
@@ -645,7 +645,7 @@ IMPL_LINK(SvxToolbarConfigPage, ModifyItemHdl, const OString&, rIdent, void)
OUString sId(OUString::number(reinterpret_cast<sal_Int64>(pEntry)));
m_xContentsListBox->insert(nActEntry, sId);
- m_xContentsListBox->set_toggle(nActEntry, pEntry->IsVisible(), 0);
+ m_xContentsListBox->set_toggle(nActEntry, pEntry->IsVisible() ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
InsertEntryIntoUI(pEntry, nActEntry, 1);
m_xContentsListBox->select(nActEntry);
@@ -702,7 +702,7 @@ IMPL_LINK(SvxToolbarConfigPage, ModifyItemHdl, const OString&, rIdent, void)
OUString sId(OUString::number(reinterpret_cast<sal_Int64>(pEntry)));
m_xContentsListBox->insert(nActEntry, sId);
m_xContentsListBox->set_toggle(nActEntry,
- pEntry->IsVisible(), 0);
+ pEntry->IsVisible() ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
InsertEntryIntoUI(pEntry, nActEntry, 1);
m_xContentsListBox->select(nActEntry);
@@ -834,7 +834,7 @@ void SvxToolbarConfigPage::SelectElement()
OUString sId(OUString::number(reinterpret_cast<sal_Int64>(entry)));
m_xContentsListBox->insert(i, sId);
if (entry->IsBinding() && !entry->IsSeparator())
- m_xContentsListBox->set_toggle(i, entry->IsVisible(), 0);
+ m_xContentsListBox->set_toggle(i, entry->IsVisible() ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
InsertEntryIntoUI(entry, i, 1);
++i;
}
@@ -861,7 +861,7 @@ void SvxToolbarConfigPage::AddFunction(int nTarget, bool bFront)
if ( pEntry->IsBinding() ) //TODO sep ?
{
pEntry->SetVisible(true);
- m_xContentsListBox->set_toggle(nNewLBEntry, true, 0);
+ m_xContentsListBox->set_toggle(nNewLBEntry, TRISTATE_TRUE, 0);
}
InsertEntryIntoUI(pEntry, nNewLBEntry, 1);
@@ -895,7 +895,7 @@ void SvxToolbarEntriesListBox::ChangedVisibility(int nRow)
if (pEntryData->IsBinding())
{
- pEntryData->SetVisible(m_xControl->get_toggle(nRow, 0));
+ pEntryData->SetVisible(m_xControl->get_toggle(nRow, 0) == TRISTATE_TRUE);
SvxConfigEntry* pToolbar = pPage->GetTopLevelSelection();
@@ -920,7 +920,7 @@ IMPL_LINK(SvxToolbarEntriesListBox, KeyInputHdl, const KeyEvent&, rKeyEvent, boo
SvxConfigEntry* pEntryData = reinterpret_cast<SvxConfigEntry*>(m_xControl->get_id(nRow).toInt64());
if (pEntryData->IsBinding() && !pEntryData->IsSeparator())
{
- m_xControl->set_toggle(nRow, !m_xControl->get_toggle(nRow, 0), 0);
+ m_xControl->set_toggle(nRow, m_xControl->get_toggle(nRow, 0) == TRISTATE_TRUE ? TRISTATE_FALSE : TRISTATE_TRUE, 0);
ChangedVisibility(nRow);
}
return true;
diff --git a/cui/source/dialogs/hangulhanjadlg.cxx b/cui/source/dialogs/hangulhanjadlg.cxx
index 0ff836f6d4f9..342b35352782 100644
--- a/cui/source/dialogs/hangulhanjadlg.cxx
+++ b/cui/source/dialogs/hangulhanjadlg.cxx
@@ -782,7 +782,7 @@ namespace svx
DBG_ASSERT( xDict.is(), "-HangulHanjaOptionsDialog::OkHdl(): someone is evaporated..." );
- bool bActive = m_xDictsLB->get_toggle(n, 0);
+ bool bActive = m_xDictsLB->get_toggle(n, 0) == TRISTATE_TRUE;
xDict->setActive( bActive );
Reference< util::XFlushable > xFlush( xDict, uno::UNO_QUERY );
if( xFlush.is() )
@@ -948,7 +948,7 @@ namespace svx
{
m_xDictsLB->append();
int nRow = m_xDictsLB->n_children() - 1;
- m_xDictsLB->set_toggle(nRow, bChecked, 0);
+ m_xDictsLB->set_toggle(nRow, bChecked ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
m_xDictsLB->set_text(nRow, rName, 1);
m_xDictsLB->set_id(nRow, rName);
}
diff --git a/cui/source/dialogs/multipat.cxx b/cui/source/dialogs/multipat.cxx
index 6adbb9464a84..45fe4cf4bec7 100644
--- a/cui/source/dialogs/multipat.cxx
+++ b/cui/source/dialogs/multipat.cxx
@@ -60,7 +60,7 @@ IMPL_LINK_NOARG(SvxPathSelectDialog, SelectHdl_Impl, weld::TreeView&, void)
void SvxMultiPathDialog::HandleEntryChecked(int nRow)
{
m_xRadioLB->select(nRow);
- bool bChecked = m_xRadioLB->get_toggle(nRow, 0);
+ bool bChecked = m_xRadioLB->get_toggle(nRow, 0) == TRISTATE_TRUE;
if (bChecked)
{
// we have radio button behavior -> so uncheck the other entries
@@ -68,7 +68,7 @@ void SvxMultiPathDialog::HandleEntryChecked(int nRow)
for (int i = 0; i < nCount; ++i)
{
if (i != nRow)
- m_xRadioLB->set_toggle(i, false, 0);
+ m_xRadioLB->set_toggle(i, TRISTATE_TRUE, 0);
}
}
}
@@ -82,7 +82,7 @@ void SvxMultiPathDialog::AppendEntry(const OUString& rText, const OUString& rId)
{
m_xRadioLB->append();
const int nRow = m_xRadioLB->n_children() - 1;
- m_xRadioLB->set_toggle(nRow, false, 0);
+ m_xRadioLB->set_toggle(nRow, TRISTATE_FALSE, 0);
m_xRadioLB->set_text(nRow, rText, 1);
m_xRadioLB->set_id(nRow, rId);
}
@@ -150,7 +150,7 @@ IMPL_LINK_NOARG(SvxPathSelectDialog, AddHdl_Impl, weld::Button&, void)
IMPL_LINK_NOARG(SvxMultiPathDialog, DelHdl_Impl, weld::Button&, void)
{
int nPos = m_xRadioLB->get_selected_index();
- bool bChecked = m_xRadioLB->get_toggle(nPos, 0);
+ bool bChecked = m_xRadioLB->get_toggle(nPos, 0) == TRISTATE_TRUE;
m_xRadioLB->remove(nPos);
int nCnt = m_xRadioLB->n_children();
if (nCnt)
@@ -161,7 +161,7 @@ IMPL_LINK_NOARG(SvxMultiPathDialog, DelHdl_Impl, weld::Button&, void)
nPos = nCnt;
if (bChecked)
{
- m_xRadioLB->set_toggle(nPos, true, 0);
+ m_xRadioLB->set_toggle(nPos, TRISTATE_TRUE, 0);
HandleEntryChecked(nPos);
}
m_xRadioLB->select(nPos);
@@ -240,7 +240,7 @@ OUString SvxMultiPathDialog::GetPath() const
OUString sWritable;
for (int i = 0, nCount = m_xRadioLB->n_children(); i < nCount; ++i)
{
- if (m_xRadioLB->get_toggle(i, 0))
+ if (m_xRadioLB->get_toggle(i, 0) == TRISTATE_TRUE)
sWritable = m_xRadioLB->get_id(i);
else
{
@@ -292,7 +292,7 @@ void SvxMultiPathDialog::SetPath( const OUString& rPath )
if (nCount)
{
- m_xRadioLB->set_toggle(nCount - 1, true, 0);
+ m_xRadioLB->set_toggle(nCount - 1, TRISTATE_TRUE, 0);
HandleEntryChecked(nCount - 1);
}
}
diff --git a/cui/source/dialogs/srchxtra.cxx b/cui/source/dialogs/srchxtra.cxx
index e1f0a869096d..ac6b4f1e711b 100644
--- a/cui/source/dialogs/srchxtra.cxx
+++ b/cui/source/dialogs/srchxtra.cxx
@@ -148,7 +148,7 @@ SvxSearchAttributeDialog::SvxSearchAttributeDialog(weld::Window* pParent,
{
m_xAttrLB->append();
const int nRow = m_xAttrLB->n_children() - 1;
- m_xAttrLB->set_toggle(nRow, bChecked, 0);
+ m_xAttrLB->set_toggle(nRow, bChecked ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
m_xAttrLB->set_text(nRow, SvxAttrNameTable::GetString(nId), 1);
m_xAttrLB->set_id(nRow, OUString::number(nSlot));
}
@@ -174,7 +174,7 @@ IMPL_LINK_NOARG(SvxSearchAttributeDialog, OKHdl, weld::Button&, void)
for (int i = 0, nCount = m_xAttrLB->n_children(); i < nCount; ++i)
{
sal_uInt16 nSlot = m_xAttrLB->get_id(i).toUInt32();
- bool bChecked = m_xAttrLB->get_toggle(i, 0);
+ bool bChecked = m_xAttrLB->get_toggle(i, 0) == TRISTATE_TRUE;
sal_uInt16 j;
for ( j = rList.Count(); j; )
diff --git a/cui/source/inc/cfg.hxx b/cui/source/inc/cfg.hxx
index fbbd96214145..c82512187a29 100644
--- a/cui/source/inc/cfg.hxx
+++ b/cui/source/inc/cfg.hxx
@@ -343,7 +343,7 @@ public:
void set_dropdown(int row, int col) { m_xControl->set_image(row, *m_xDropDown, col); }
void set_id(int row, const OUString& rId) { m_xControl->set_id(row, rId); }
void clear() { m_xControl->clear(); } //need frees ?
- void set_toggle(int row, bool bOn, int col) { m_xControl->set_toggle(row, bOn, col); }
+ void set_toggle(int row, TriState eState, int col) { m_xControl->set_toggle(row, eState, col); }
void scroll_to_row(int pos) { m_xControl->scroll_to_row(pos); }
void select(int pos) { m_xControl->select(pos); }
diff --git a/cui/source/options/certpath.cxx b/cui/source/options/certpath.cxx
index 2eff6841eb60..c830b6e68631 100644
--- a/cui/source/options/certpath.cxx
+++ b/cui/source/options/certpath.cxx
@@ -71,7 +71,7 @@ CertPathDialog::CertPathDialog(weld::Window* pParent)
{
m_xCertPathList->append();
const int nRow = m_xCertPathList->n_children() - 1;
- m_xCertPathList->set_toggle(nRow, false, 0);
+ m_xCertPathList->set_toggle(nRow, TRISTATE_FALSE, 0);
OUString sEntry = OUString::createFromAscii(productNames[i]) + ":" + profile;
m_xCertPathList->set_text(nRow, sEntry, 1);
OUString sProfilePath = xMozillaBootstrap->getProfilePath( productTypes[i], profile );
@@ -103,7 +103,7 @@ CertPathDialog::CertPathDialog(weld::Window* pParent)
if (m_xCertPathList->n_children())
{
- m_xCertPathList->set_toggle(0, true, 0);
+ m_xCertPathList->set_toggle(0, TRISTATE_TRUE, 0);
HandleEntryChecked(0);
}
}
@@ -146,7 +146,7 @@ IMPL_LINK(CertPathDialog, CheckHdl_Impl, const row_col&, rRowCol, void)
void CertPathDialog::HandleEntryChecked(int nRow)
{
m_xCertPathList->select(nRow);
- bool bChecked = m_xCertPathList->get_toggle(nRow, 0);
+ bool bChecked = m_xCertPathList->get_toggle(nRow, 0) == TRISTATE_TRUE;
if (bChecked)
{
// we have radio button behavior -> so uncheck the other entries
@@ -154,7 +154,7 @@ void CertPathDialog::HandleEntryChecked(int nRow)
for (int i = 0; i < nCount; ++i)
{
if (i != nRow)
- m_xCertPathList->set_toggle(i, false, 0);
+ m_xCertPathList->set_toggle(i, TRISTATE_FALSE, 0);
}
}
}
@@ -167,7 +167,7 @@ void CertPathDialog::AddCertPath(const OUString &rProfile, const OUString &rPath
//already exists, just select the original one
if (sCertPath == rPath)
{
- m_xCertPathList->set_toggle(i, true, 0);
+ m_xCertPathList->set_toggle(i, TRISTATE_TRUE, 0);
HandleEntryChecked(i);
return;
}
@@ -175,7 +175,7 @@ void CertPathDialog::AddCertPath(const OUString &rProfile, const OUString &rPath
m_xCertPathList->append();
const int nRow = m_xCertPathList->n_children() - 1;
- m_xCertPathList->set_toggle(nRow, true, 0);
+ m_xCertPathList->set_toggle(nRow, TRISTATE_TRUE, 0);
m_xCertPathList->set_text(nRow, rProfile, 1);
m_xCertPathList->set_text(nRow, rPath, 2);
m_xCertPathList->set_id(nRow, rPath);
diff --git a/cui/source/options/optlingu.cxx b/cui/source/options/optlingu.cxx
index ce46b3c4f1d7..e9134ef81e2b 100644
--- a/cui/source/options/optlingu.cxx
+++ b/cui/source/options/optlingu.cxx
@@ -1069,7 +1069,7 @@ bool SvxLinguTabPage::FillItemSet( SfxItemSet* rCoreSet )
DicUserData aData(m_xLinguDicsCLB->get_id(i).toUInt32());
if (aData.GetEntryId() < nDics)
{
- bool bChecked = m_xLinguDicsCLB->get_toggle(i, 0);
+ bool bChecked = m_xLinguDicsCLB->get_toggle(i, 0) == TRISTATE_TRUE;
uno::Reference< XDictionary > xDic( aDics.getConstArray()[ i ] );
if (xDic.is())
{
@@ -1102,7 +1102,7 @@ bool SvxLinguTabPage::FillItemSet( SfxItemSet* rCoreSet )
Any aAny;
if (aData.IsCheckable())
{
- bool bChecked = m_xLinguOptionsCLB->get_toggle(j, 0);
+ bool bChecked = m_xLinguOptionsCLB->get_toggle(j, 0) == TRISTATE_TRUE;
aAny <<= bChecked;
}
else if (aData.HasNumericValue())
@@ -1127,7 +1127,7 @@ bool SvxLinguTabPage::FillItemSet( SfxItemSet* rCoreSet )
}
// automatic spell checking
- bool bNewAutoCheck = m_xLinguOptionsCLB->get_toggle(EID_SPELL_AUTO, 0);
+ bool bNewAutoCheck = m_xLinguOptionsCLB->get_toggle(EID_SPELL_AUTO, 0) == TRISTATE_TRUE;
const SfxPoolItem* pOld = GetOldItem( *rCoreSet, SID_AUTOSPELL_CHECK );
if ( !pOld || static_cast<const SfxBoolItem*>(pOld)->GetValue() != bNewAutoCheck )
{
@@ -1171,7 +1171,7 @@ void SvxLinguTabPage::AddDicBoxEntry(
int nEntry = m_xLinguDicsCLB->n_children() - 1;
DicUserData aData( GetDicUserData( rxDic, nIdx ) );
m_xLinguDicsCLB->set_id(nEntry, OUString::number(aData.GetUserData()));
- m_xLinguDicsCLB->set_toggle(nEntry, aData.IsChecked(), 0);
+ m_xLinguDicsCLB->set_toggle(nEntry, aData.IsChecked() ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
m_xLinguDicsCLB->set_text(nEntry, aTxt, 1); // append at end
m_xLinguDicsCLB->thaw();
@@ -1213,7 +1213,7 @@ void SvxLinguTabPage::UpdateModulesBox_Impl()
const ServiceInfo_Impl &rInfo = rAllDispSrvcArr[i];
m_xLinguModulesCLB->append();
m_xLinguModulesCLB->set_id(i, OUString::number(reinterpret_cast<sal_Int64>(&rInfo)));
- m_xLinguModulesCLB->set_toggle(i, rInfo.bConfigured, 0);
+ m_xLinguModulesCLB->set_toggle(i, rInfo.bConfigured ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
m_xLinguModulesCLB->set_text(i, rInfo.sDisplayName, 1);
}
if (nDispSrvcCount)
@@ -1254,7 +1254,7 @@ void SvxLinguTabPage::Reset( const SfxItemSet* rSet )
if (pItem)
bVal = static_cast<const SfxBoolItem *>(pItem)->GetValue();
nUserData = OptionsUserData( EID_SPELL_AUTO, false, 0, true, bVal).GetUserData();
- m_xLinguOptionsCLB->set_toggle(nEntry, bVal, 0);
+ m_xLinguOptionsCLB->set_toggle(nEntry, bVal ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
m_xLinguOptionsCLB->set_text(nEntry, sSpellAuto, 1);
m_xLinguOptionsCLB->set_id(nEntry, OUString::number(nUserData));
@@ -1263,7 +1263,7 @@ void SvxLinguTabPage::Reset( const SfxItemSet* rSet )
aLngCfg.GetProperty( UPN_IS_GRAMMAR_AUTO ) >>= bVal;
nUserData = OptionsUserData( EID_GRAMMAR_AUTO, false, 0, true, bVal).GetUserData();
- m_xLinguOptionsCLB->set_toggle(nEntry, bVal, 0);
+ m_xLinguOptionsCLB->set_toggle(nEntry, bVal ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
m_xLinguOptionsCLB->set_text(nEntry, sGrammarAuto, 1);
m_xLinguOptionsCLB->set_id(nEntry, OUString::number(nUserData));
@@ -1272,7 +1272,7 @@ void SvxLinguTabPage::Reset( const SfxItemSet* rSet )
aLngCfg.GetProperty( UPN_IS_SPELL_UPPER_CASE ) >>= bVal;
nUserData = OptionsUserData( EID_CAPITAL_WORDS, false, 0, true, bVal).GetUserData();
- m_xLinguOptionsCLB->set_toggle(nEntry, bVal, 0);
+ m_xLinguOptionsCLB->set_toggle(nEntry, bVal ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
m_xLinguOptionsCLB->set_text(nEntry, sCapitalWords, 1);
m_xLinguOptionsCLB->set_id(nEntry, OUString::number(nUserData));
@@ -1281,7 +1281,7 @@ void SvxLinguTabPage::Reset( const SfxItemSet* rSet )
aLngCfg.GetProperty( UPN_IS_SPELL_WITH_DIGITS ) >>= bVal;
nUserData = OptionsUserData( EID_WORDS_WITH_DIGITS, false, 0, true, bVal).GetUserData();
- m_xLinguOptionsCLB->set_toggle(nEntry, bVal, 0);
+ m_xLinguOptionsCLB->set_toggle(nEntry, bVal ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
m_xLinguOptionsCLB->set_text(nEntry, sWordsWithDigits, 1);
m_xLinguOptionsCLB->set_id(nEntry, OUString::number(nUserData));
@@ -1290,7 +1290,7 @@ void SvxLinguTabPage::Reset( const SfxItemSet* rSet )
aLngCfg.GetProperty( UPN_IS_SPELL_SPECIAL ) >>= bVal;
nUserData = OptionsUserData( EID_SPELL_SPECIAL, false, 0, true, bVal).GetUserData();
- m_xLinguOptionsCLB->set_toggle(nEntry, bVal, 0);
+ m_xLinguOptionsCLB->set_toggle(nEntry, bVal ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
m_xLinguOptionsCLB->set_text(nEntry, sSpellSpecial, 1);
m_xLinguOptionsCLB->set_id(nEntry, OUString::number(nUserData));
@@ -1335,7 +1335,7 @@ void SvxLinguTabPage::Reset( const SfxItemSet* rSet )
aLngCfg.GetProperty( UPN_IS_HYPH_AUTO ) >>= bVal;
nUserData = OptionsUserData( EID_HYPH_AUTO, false, 0, true, bVal).GetUserData();
- m_xLinguOptionsCLB->set_toggle(nEntry, bVal, 0);
+ m_xLinguOptionsCLB->set_toggle(nEntry, bVal ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
m_xLinguOptionsCLB->set_text(nEntry, sHyphAuto, 1);
m_xLinguOptionsCLB->set_id(nEntry, OUString::number(nUserData));
@@ -1344,7 +1344,7 @@ void SvxLinguTabPage::Reset( const SfxItemSet* rSet )
aLngCfg.GetProperty( UPN_IS_HYPH_SPECIAL ) >>= bVal;
nUserData = OptionsUserData( EID_HYPH_SPECIAL, false, 0, true, bVal).GetUserData();
- m_xLinguOptionsCLB->set_toggle(nEntry, bVal, 0);
+ m_xLinguOptionsCLB->set_toggle(nEntry, bVal ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
m_xLinguOptionsCLB->set_text(nEntry, sHyphSpecial, 1);
m_xLinguOptionsCLB->set_id(nEntry, OUString::number(nUserData));
@@ -1388,7 +1388,7 @@ IMPL_LINK(SvxLinguTabPage, ModulesBoxCheckButtonHdl_Impl, const row_col&, rRowCo
return;
auto nPos = rRowCol.first;
pLinguData->Reconfigure(m_xLinguModulesCLB->get_text(nPos, 1),
- m_xLinguModulesCLB->get_toggle(nPos, 0));
+ m_xLinguModulesCLB->get_toggle(nPos, 0) == TRISTATE_TRUE);
}
IMPL_LINK(SvxLinguTabPage, DicsBoxCheckButtonHdl_Impl, const row_col&, rRowCol, void)
@@ -1396,7 +1396,7 @@ IMPL_LINK(SvxLinguTabPage, DicsBoxCheckButtonHdl_Impl, const row_col&, rRowCol,
auto nPos = rRowCol.first;
const uno::Reference<XDictionary> &rDic = aDics.getConstArray()[ nPos ];
if (LinguMgr::GetIgnoreAllList() == rDic)
- m_xLinguDicsCLB->set_toggle(nPos, true, 0);
+ m_xLinguDicsCLB->set_toggle(nPos, TRISTATE_TRUE, 0);
}
IMPL_LINK(SvxLinguTabPage, ClickHdl_Impl, weld::Button&, rBtn, void)
diff --git a/cui/source/tabpages/autocdlg.cxx b/cui/source/tabpages/autocdlg.cxx
index 0438cdadddfe..e8d23d237f69 100644
--- a/cui/source/tabpages/autocdlg.cxx
+++ b/cui/source/tabpages/autocdlg.cxx
@@ -216,14 +216,14 @@ bool OfaAutocorrOptionsPage::FillItemSet( SfxItemSet* )
ACFlags nFlags = pAutoCorrect->GetFlags();
int nPos = 0;
- pAutoCorrect->SetAutoCorrFlag(ACFlags::Autocorrect, m_xCheckLB->get_toggle(nPos++, CBCOL_FIRST));
- pAutoCorrect->SetAutoCorrFlag(ACFlags::CapitalStartWord, m_xCheckLB->get_toggle(nPos++, CBCOL_FIRST));
- pAutoCorrect->SetAutoCorrFlag(ACFlags::CapitalStartSentence, m_xCheckLB->get_toggle(nPos++, CBCOL_FIRST));
- pAutoCorrect->SetAutoCorrFlag(ACFlags::ChgWeightUnderl, m_xCheckLB->get_toggle(nPos++, CBCOL_FIRST));
- pAutoCorrect->SetAutoCorrFlag(ACFlags::SetINetAttr, m_xCheckLB->get_toggle(nPos++, CBCOL_FIRST));
- pAutoCorrect->SetAutoCorrFlag(ACFlags::ChgToEnEmDash, m_xCheckLB->get_toggle(nPos++, CBCOL_FIRST));
- pAutoCorrect->SetAutoCorrFlag(ACFlags::IgnoreDoubleSpace, m_xCheckLB->get_toggle(nPos++, CBCOL_FIRST));
- pAutoCorrect->SetAutoCorrFlag(ACFlags::CorrectCapsLock, m_xCheckLB->get_toggle(nPos++, CBCOL_FIRST));
+ pAutoCorrect->SetAutoCorrFlag(ACFlags::Autocorrect, m_xCheckLB->get_toggle(nPos++, CBCOL_FIRST) == TRISTATE_TRUE);
+ pAutoCorrect->SetAutoCorrFlag(ACFlags::CapitalStartWord, m_xCheckLB->get_toggle(nPos++, CBCOL_FIRST) == TRISTATE_TRUE);
+ pAutoCorrect->SetAutoCorrFlag(ACFlags::CapitalStartSentence, m_xCheckLB->get_toggle(nPos++, CBCOL_FIRST) == TRISTATE_TRUE);
+ pAutoCorrect->SetAutoCorrFlag(ACFlags::ChgWeightUnderl, m_xCheckLB->get_toggle(nPos++, CBCOL_FIRST) == TRISTATE_TRUE);
+ pAutoCorrect->SetAutoCorrFlag(ACFlags::SetINetAttr, m_xCheckLB->get_toggle(nPos++, CBCOL_FIRST) == TRISTATE_TRUE);
+ pAutoCorrect->SetAutoCorrFlag(ACFlags::ChgToEnEmDash, m_xCheckLB->get_toggle(nPos++, CBCOL_FIRST) == TRISTATE_TRUE);
+ pAutoCorrect->SetAutoCorrFlag(ACFlags::IgnoreDoubleSpace, m_xCheckLB->get_toggle(nPos++, CBCOL_FIRST) == TRISTATE_TRUE);
+ pAutoCorrect->SetAutoCorrFlag(ACFlags::CorrectCapsLock, m_xCheckLB->get_toggle(nPos++, CBCOL_FIRST) == TRISTATE_TRUE);
bool bReturn = nFlags != pAutoCorrect->GetFlags();
if(bReturn )
@@ -244,7 +244,7 @@ void OfaAutocorrOptionsPage::InsertEntry(const OUString& rTxt)
{
m_xCheckLB->append();
const int nRow = m_xCheckLB->n_children() - 1;
- m_xCheckLB->set_toggle(nRow, false, CBCOL_FIRST);
+ m_xCheckLB->set_toggle(nRow, TRISTATE_FALSE, CBCOL_FIRST);
m_xCheckLB->set_text(nRow, rTxt, 1);
}
@@ -266,14 +266,14 @@ void OfaAutocorrOptionsPage::Reset( const SfxItemSet* )
InsertEntry(m_sAccidentalCaps);
int nPos = 0;
- m_xCheckLB->set_toggle( nPos++, bool(nFlags & ACFlags::Autocorrect), CBCOL_FIRST );
- m_xCheckLB->set_toggle( nPos++, bool(nFlags & ACFlags::CapitalStartWord), CBCOL_FIRST );
- m_xCheckLB->set_toggle( nPos++, bool(nFlags & ACFlags::CapitalStartSentence), CBCOL_FIRST );
- m_xCheckLB->set_toggle( nPos++, bool(nFlags & ACFlags::ChgWeightUnderl), CBCOL_FIRST );
- m_xCheckLB->set_toggle( nPos++, bool(nFlags & ACFlags::SetINetAttr), CBCOL_FIRST );
- m_xCheckLB->set_toggle( nPos++, bool(nFlags & ACFlags::ChgToEnEmDash), CBCOL_FIRST );
- m_xCheckLB->set_toggle( nPos++, bool(nFlags & ACFlags::IgnoreDoubleSpace), CBCOL_FIRST );
- m_xCheckLB->set_toggle( nPos++, bool(nFlags & ACFlags::CorrectCapsLock), CBCOL_FIRST );
+ m_xCheckLB->set_toggle( nPos++, bool(nFlags & ACFlags::Autocorrect) ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST );
+ m_xCheckLB->set_toggle( nPos++, bool(nFlags & ACFlags::CapitalStartWord) ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST );
+ m_xCheckLB->set_toggle( nPos++, bool(nFlags & ACFlags::CapitalStartSentence) ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST );
+ m_xCheckLB->set_toggle( nPos++, bool(nFlags & ACFlags::ChgWeightUnderl) ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST );
+ m_xCheckLB->set_toggle( nPos++, bool(nFlags & ACFlags::SetINetAttr) ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST );
+ m_xCheckLB->set_toggle( nPos++, bool(nFlags & ACFlags::ChgToEnEmDash) ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST );
+ m_xCheckLB->set_toggle( nPos++, bool(nFlags & ACFlags::IgnoreDoubleSpace) ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST );
+ m_xCheckLB->set_toggle( nPos++, bool(nFlags & ACFlags::CorrectCapsLock) ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST );
m_xCheckLB->thaw();
}
@@ -385,9 +385,9 @@ void OfaSwAutoFmtOptionsPage::CreateEntry(const OUString& rTxt, sal_uInt16 nCol)
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);
+ m_xCheckLB->set_toggle(nRow, TRISTATE_FALSE, CBCOL_FIRST);
if (nCol == CBCOL_SECOND || nCol == CBCOL_BOTH)
- m_xCheckLB->set_toggle(nRow, false, CBCOL_SECOND);
+ m_xCheckLB->set_toggle(nRow, TRISTATE_FALSE, CBCOL_SECOND);
m_xCheckLB->set_text(nRow, rTxt, 2);
}
@@ -409,51 +409,51 @@ bool OfaSwAutoFmtOptionsPage::FillItemSet( SfxItemSet* )
SvxSwAutoFormatFlags *pOpt = &pAutoCorrect->GetSwFlags();
ACFlags nFlags = pAutoCorrect->GetFlags();
- bool bCheck = m_xCheckLB->get_toggle(USE_REPLACE_TABLE, CBCOL_FIRST);
+ bool bCheck = m_xCheckLB->get_toggle(USE_REPLACE_TABLE, CBCOL_FIRST) == TRISTATE_TRUE;
bModified |= pOpt->bAutoCorrect != bCheck;
pOpt->bAutoCorrect = bCheck;
pAutoCorrect->SetAutoCorrFlag(ACFlags::Autocorrect,
- m_xCheckLB->get_toggle(USE_REPLACE_TABLE, CBCOL_SECOND));
+ m_xCheckLB->get_toggle(USE_REPLACE_TABLE, CBCOL_SECOND) == TRISTATE_TRUE);
- bCheck = m_xCheckLB->get_toggle(CORR_UPPER, CBCOL_FIRST);
+ bCheck = m_xCheckLB->get_toggle(CORR_UPPER, CBCOL_FIRST) == TRISTATE_TRUE;
bModified |= pOpt->bCapitalStartWord != bCheck;
pOpt->bCapitalStartWord = bCheck;
pAutoCorrect->SetAutoCorrFlag(ACFlags::CapitalStartWord,
- m_xCheckLB->get_toggle(CORR_UPPER, CBCOL_SECOND));
+ m_xCheckLB->get_toggle(CORR_UPPER, CBCOL_SECOND) == TRISTATE_TRUE);
- bCheck = m_xCheckLB->get_toggle(BEGIN_UPPER, CBCOL_FIRST);
+ bCheck = m_xCheckLB->get_toggle(BEGIN_UPPER, CBCOL_FIRST) == TRISTATE_TRUE;
bModified |= pOpt->bCapitalStartSentence != bCheck;
pOpt->bCapitalStartSentence = bCheck;
pAutoCorrect->SetAutoCorrFlag(ACFlags::CapitalStartSentence,
- m_xCheckLB->get_toggle(BEGIN_UPPER, CBCOL_SECOND));
+ m_xCheckLB->get_toggle(BEGIN_UPPER, CBCOL_SECOND) == TRISTATE_TRUE);
- bCheck = m_xCheckLB->get_toggle(BOLD_UNDERLINE, CBCOL_FIRST);
+ bCheck = m_xCheckLB->get_toggle(BOLD_UNDERLINE, CBCOL_FIRST) == TRISTATE_TRUE;
bModified |= pOpt->bChgWeightUnderl != bCheck;
pOpt->bChgWeightUnderl = bCheck;
pAutoCorrect->SetAutoCorrFlag(ACFlags::ChgWeightUnderl,
- m_xCheckLB->get_toggle(BOLD_UNDERLINE, CBCOL_SECOND));
+ m_xCheckLB->get_toggle(BOLD_UNDERLINE, CBCOL_SECOND) == TRISTATE_TRUE);
pAutoCorrect->SetAutoCorrFlag(ACFlags::IgnoreDoubleSpace,
- m_xCheckLB->get_toggle(IGNORE_DBLSPACE, CBCOL_SECOND));
+ m_xCheckLB->get_toggle(IGNORE_DBLSPACE, CBCOL_SECOND) == TRISTATE_TRUE);
pAutoCorrect->SetAutoCorrFlag(ACFlags::CorrectCapsLock,
- m_xCheckLB->get_toggle(CORRECT_CAPS_LOCK, CBCOL_SECOND));
+ m_xCheckLB->get_toggle(CORRECT_CAPS_LOCK, CBCOL_SECOND) == TRISTATE_TRUE);
- bCheck = m_xCheckLB->get_toggle(DETECT_URL, CBCOL_FIRST);
+ bCheck = m_xCheckLB->get_toggle(DETECT_URL, CBCOL_FIRST) == TRISTATE_TRUE;
bModified |= pOpt->bSetINetAttr != bCheck;
pOpt->bSetINetAttr = bCheck;
pAutoCorrect->SetAutoCorrFlag(ACFlags::SetINetAttr,
- m_xCheckLB->get_toggle(DETECT_URL, CBCOL_SECOND));
+ m_xCheckLB->get_toggle(DETECT_URL, CBCOL_SECOND) == TRISTATE_TRUE);
- bCheck = m_xCheckLB->get_toggle(DEL_EMPTY_NODE, CBCOL_FIRST);
+ bCheck = m_xCheckLB->get_toggle(DEL_EMPTY_NODE, CBCOL_FIRST) == TRISTATE_TRUE;
bModified |= pOpt->bDelEmptyNode != bCheck;
pOpt->bDelEmptyNode = bCheck;
- bCheck = m_xCheckLB->get_toggle(REPLACE_USER_COLL, CBCOL_FIRST);
+ bCheck = m_xCheckLB->get_toggle(REPLACE_USER_COLL, CBCOL_FIRST) == TRISTATE_TRUE;
bModified |= pOpt->bChgUserColl != bCheck;
pOpt->bChgUserColl = bCheck;
- bCheck = m_xCheckLB->get_toggle(REPLACE_BULLETS, CBCOL_FIRST);
+ bCheck = m_xCheckLB->get_toggle(REPLACE_BULLETS, CBCOL_FIRST) == TRISTATE_TRUE;
bModified |= pOpt->bChgEnumNum != bCheck;
pOpt->bChgEnumNum = bCheck;
bModified |= aBulletFont != pOpt->aBulletFont;
@@ -466,45 +466,45 @@ bool OfaSwAutoFmtOptionsPage::FillItemSet( SfxItemSet* )
pOpt->aByInputBulletFont = aByInputBulletFont;
pOpt->cByInputBullet = sByInputBulletChar[0];
- bCheck = m_xCheckLB->get_toggle(MERGE_SINGLE_LINE_PARA, CBCOL_FIRST);
+ bCheck = m_xCheckLB->get_toggle(MERGE_SINGLE_LINE_PARA, CBCOL_FIRST) == TRISTATE_TRUE;
bModified |= pOpt->bRightMargin != bCheck;
pOpt->bRightMargin = bCheck;
bModified |= nPercent != pOpt->nRightMargin;
pOpt->nRightMargin = static_cast<sal_uInt8>(nPercent);
- bCheck = m_xCheckLB->get_toggle(APPLY_NUMBERING, CBCOL_SECOND);
+ bCheck = m_xCheckLB->get_toggle(APPLY_NUMBERING, CBCOL_SECOND) == TRISTATE_TRUE;
bModified |= pOpt->bSetNumRule != bCheck;
pOpt->bSetNumRule = bCheck;
- bCheck = m_xCheckLB->get_toggle(INSERT_BORDER, CBCOL_SECOND);
+ bCheck = m_xCheckLB->get_toggle(INSERT_BORDER, CBCOL_SECOND) == TRISTATE_TRUE;
bModified |= pOpt->bSetBorder != bCheck;
pOpt->bSetBorder = bCheck;
- bCheck = m_xCheckLB->get_toggle(CREATE_TABLE, CBCOL_SECOND);
+ bCheck = m_xCheckLB->get_toggle(CREATE_TABLE, CBCOL_SECOND) == TRISTATE_TRUE;
bModified |= pOpt->bCreateTable != bCheck;
pOpt->bCreateTable = bCheck;
- bCheck = m_xCheckLB->get_toggle(REPLACE_STYLES, CBCOL_SECOND);
+ bCheck = m_xCheckLB->get_toggle(REPLACE_STYLES, CBCOL_SECOND) == TRISTATE_TRUE;
bModified |= pOpt->bReplaceStyles != bCheck;
pOpt->bReplaceStyles = bCheck;
- bCheck = m_xCheckLB->get_toggle(REPLACE_DASHES, CBCOL_FIRST);
+ bCheck = m_xCheckLB->get_toggle(REPLACE_DASHES, CBCOL_FIRST) == TRISTATE_TRUE;
bModified |= pOpt->bChgToEnEmDash != bCheck;
pOpt->bChgToEnEmDash = bCheck;
pAutoCorrect->SetAutoCorrFlag(ACFlags::ChgToEnEmDash,
- m_xCheckLB->get_toggle(REPLACE_DASHES, CBCOL_SECOND));
+ m_xCheckLB->get_toggle(REPLACE_DASHES, CBCOL_SECOND) == TRISTATE_TRUE);
- bCheck = m_xCheckLB->get_toggle(DEL_SPACES_AT_STT_END, CBCOL_FIRST);
+ bCheck = m_xCheckLB->get_toggle(DEL_SPACES_AT_STT_END, CBCOL_FIRST) == TRISTATE_TRUE;
bModified |= pOpt->bAFormatDelSpacesAtSttEnd != bCheck;
pOpt->bAFormatDelSpacesAtSttEnd = bCheck;
- bCheck = m_xCheckLB->get_toggle(DEL_SPACES_AT_STT_END, CBCOL_SECOND);
+ bCheck = m_xCheckLB->get_toggle(DEL_SPACES_AT_STT_END, CBCOL_SECOND) == TRISTATE_TRUE;
bModified |= pOpt->bAFormatByInpDelSpacesAtSttEnd != bCheck;
pOpt->bAFormatByInpDelSpacesAtSttEnd = bCheck;
- bCheck = m_xCheckLB->get_toggle(DEL_SPACES_BETWEEN_LINES, CBCOL_FIRST);
+ bCheck = m_xCheckLB->get_toggle(DEL_SPACES_BETWEEN_LINES, CBCOL_FIRST) == TRISTATE_TRUE;
bModified |= pOpt->bAFormatDelSpacesBetweenLines != bCheck;
pOpt->bAFormatDelSpacesBetweenLines = bCheck;
- bCheck = m_xCheckLB->get_toggle(DEL_SPACES_BETWEEN_LINES, CBCOL_SECOND);
+ bCheck = m_xCheckLB->get_toggle(DEL_SPACES_BETWEEN_LINES, CBCOL_SECOND) == TRISTATE_TRUE;
bModified |= pOpt->bAFormatByInpDelSpacesBetweenLines != bCheck;
pOpt->bAFormatByInpDelSpacesBetweenLines = bCheck;
@@ -563,32 +563,32 @@ void OfaSwAutoFmtOptionsPage::Reset( const SfxItemSet* )
CreateEntry(sBullet.replaceFirst("%1", sByInputBulletChar), CBCOL_FIRST);
CreateEntry(sRightMargin.replaceFirst("%1", sMargin), CBCOL_FIRST);
- m_xCheckLB->set_toggle(USE_REPLACE_TABLE, pOpt->bAutoCorrect, CBCOL_FIRST);
- m_xCheckLB->set_toggle(USE_REPLACE_TABLE, bool(nFlags & ACFlags::Autocorrect), CBCOL_SECOND);
- m_xCheckLB->set_toggle(CORR_UPPER, pOpt->bCapitalStartWord, CBCOL_FIRST);
- m_xCheckLB->set_toggle(CORR_UPPER, bool(nFlags & ACFlags::CapitalStartWord), CBCOL_SECOND);
- m_xCheckLB->set_toggle(BEGIN_UPPER, pOpt->bCapitalStartSentence, CBCOL_FIRST);
- m_xCheckLB->set_toggle(BEGIN_UPPER, bool(nFlags & ACFlags::CapitalStartSentence), CBCOL_SECOND);
- m_xCheckLB->set_toggle(BOLD_UNDERLINE, pOpt->bChgWeightUnderl, CBCOL_FIRST);
- m_xCheckLB->set_toggle(BOLD_UNDERLINE, bool(nFlags & ACFlags::ChgWeightUnderl), CBCOL_SECOND);
- m_xCheckLB->set_toggle(DETECT_URL, pOpt->bSetINetAttr, CBCOL_FIRST);
- m_xCheckLB->set_toggle(DETECT_URL, bool(nFlags & ACFlags::SetINetAttr), CBCOL_SECOND);
- m_xCheckLB->set_toggle(REPLACE_DASHES, pOpt->bChgToEnEmDash, CBCOL_FIRST);
- m_xCheckLB->set_toggle(REPLACE_DASHES, bool(nFlags & ACFlags::ChgToEnEmDash), CBCOL_SECOND);
- m_xCheckLB->set_toggle(DEL_SPACES_AT_STT_END, pOpt->bAFormatDelSpacesAtSttEnd, CBCOL_FIRST);
- m_xCheckLB->set_toggle(DEL_SPACES_AT_STT_END, pOpt->bAFormatByInpDelSpacesAtSttEnd, CBCOL_SECOND);
- m_xCheckLB->set_toggle(DEL_SPACES_BETWEEN_LINES, pOpt->bAFormatDelSpacesBetweenLines, CBCOL_FIRST);
- m_xCheckLB->set_toggle(DEL_SPACES_BETWEEN_LINES, pOpt->bAFormatByInpDelSpacesBetweenLines, CBCOL_SECOND);
- m_xCheckLB->set_toggle(IGNORE_DBLSPACE, bool(nFlags & ACFlags::IgnoreDoubleSpace), CBCOL_SECOND);
- m_xCheckLB->set_toggle(CORRECT_CAPS_LOCK, bool(nFlags & ACFlags::CorrectCapsLock), CBCOL_SECOND);
- m_xCheckLB->set_toggle(APPLY_NUMBERING, pOpt->bSetNumRule, CBCOL_SECOND);
- m_xCheckLB->set_toggle(INSERT_BORDER, pOpt->bSetBorder, CBCOL_SECOND);
- m_xCheckLB->set_toggle(CREATE_TABLE, pOpt->bCreateTable, CBCOL_SECOND);
- m_xCheckLB->set_toggle(REPLACE_STYLES, pOpt->bReplaceStyles, CBCOL_SECOND);
- m_xCheckLB->set_toggle(DEL_EMPTY_NODE, pOpt->bDelEmptyNode, CBCOL_FIRST);
- m_xCheckLB->set_toggle(REPLACE_USER_COLL, pOpt->bChgUserColl, CBCOL_FIRST);
- m_xCheckLB->set_toggle(REPLACE_BULLETS, pOpt->bChgEnumNum, CBCOL_FIRST);
- m_xCheckLB->set_toggle(MERGE_SINGLE_LINE_PARA, pOpt->bRightMargin, CBCOL_FIRST);
+ m_xCheckLB->set_toggle(USE_REPLACE_TABLE, pOpt->bAutoCorrect ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST);
+ m_xCheckLB->set_toggle(USE_REPLACE_TABLE, bool(nFlags & ACFlags::Autocorrect) ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_SECOND);
+ m_xCheckLB->set_toggle(CORR_UPPER, pOpt->bCapitalStartWord ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST);
+ m_xCheckLB->set_toggle(CORR_UPPER, bool(nFlags & ACFlags::CapitalStartWord) ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_SECOND);
+ m_xCheckLB->set_toggle(BEGIN_UPPER, pOpt->bCapitalStartSentence ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST);
+ m_xCheckLB->set_toggle(BEGIN_UPPER, bool(nFlags & ACFlags::CapitalStartSentence) ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_SECOND);
+ m_xCheckLB->set_toggle(BOLD_UNDERLINE, pOpt->bChgWeightUnderl ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST);
+ m_xCheckLB->set_toggle(BOLD_UNDERLINE, bool(nFlags & ACFlags::ChgWeightUnderl) ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_SECOND);
+ m_xCheckLB->set_toggle(DETECT_URL, pOpt->bSetINetAttr ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST);
+ m_xCheckLB->set_toggle(DETECT_URL, bool(nFlags & ACFlags::SetINetAttr) ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_SECOND);
+ m_xCheckLB->set_toggle(REPLACE_DASHES, pOpt->bChgToEnEmDash ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST);
+ m_xCheckLB->set_toggle(REPLACE_DASHES, bool(nFlags & ACFlags::ChgToEnEmDash) ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_SECOND);
+ m_xCheckLB->set_toggle(DEL_SPACES_AT_STT_END, pOpt->bAFormatDelSpacesAtSttEnd ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST);
+ m_xCheckLB->set_toggle(DEL_SPACES_AT_STT_END, pOpt->bAFormatByInpDelSpacesAtSttEnd ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_SECOND);
+ m_xCheckLB->set_toggle(DEL_SPACES_BETWEEN_LINES, pOpt->bAFormatDelSpacesBetweenLines ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST);
+ m_xCheckLB->set_toggle(DEL_SPACES_BETWEEN_LINES, pOpt->bAFormatByInpDelSpacesBetweenLines ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_SECOND);
+ m_xCheckLB->set_toggle(IGNORE_DBLSPACE, bool(nFlags & ACFlags::IgnoreDoubleSpace) ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_SECOND);
+ m_xCheckLB->set_toggle(CORRECT_CAPS_LOCK, bool(nFlags & ACFlags::CorrectCapsLock) ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_SECOND);
+ m_xCheckLB->set_toggle(APPLY_NUMBERING, pOpt->bSetNumRule ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_SECOND);
+ m_xCheckLB->set_toggle(INSERT_BORDER, pOpt->bSetBorder ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_SECOND);
+ m_xCheckLB->set_toggle(CREATE_TABLE, pOpt->bCreateTable ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_SECOND);
+ m_xCheckLB->set_toggle(REPLACE_STYLES, pOpt->bReplaceStyles ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_SECOND);
+ m_xCheckLB->set_toggle(DEL_EMPTY_NODE, pOpt->bDelEmptyNode ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST);
+ m_xCheckLB->set_toggle(REPLACE_USER_COLL, pOpt->bChgUserColl ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST);
+ m_xCheckLB->set_toggle(REPLACE_BULLETS, pOpt->bChgEnumNum ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST);
+ m_xCheckLB->set_toggle(MERGE_SINGLE_LINE_PARA, pOpt->bRightMargin ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST);
ImpUserData* pUserData = new ImpUserData(&sBulletChar, &aBulletFont);
OUString sId(OUString::number(reinterpret_cast<sal_Int64>(pUserData)));
@@ -1532,9 +1532,9 @@ void OfaQuoteTabPage::CreateEntry(weld::TreeView& rCheckLB, const OUString& rTxt
rCheckLB.append();
const int nRow = rCheckLB.n_children() - 1;
if (nCol == CBCOL_FIRST || nCol == CBCOL_BOTH)
- rCheckLB.set_toggle(nRow, false, CBCOL_FIRST);
+ rCheckLB.set_toggle(nRow, TRISTATE_FALSE, CBCOL_FIRST);
if (nCol == CBCOL_SECOND || nCol == CBCOL_BOTH)
- rCheckLB.set_toggle(nRow, false, CBCOL_SECOND);
+ rCheckLB.set_toggle(nRow, TRISTATE_FALSE, CBCOL_SECOND);
rCheckLB.set_text(nRow, rTxt, nTextCol);
}
@@ -1615,8 +1615,8 @@ bool OfaQuoteTabPage::FillItemSet( SfxItemSet* )
if (m_xCheckLB->get_visible())
{
int nPos = 0;
- pAutoCorrect->SetAutoCorrFlag(ACFlags::AddNonBrkSpace, m_xCheckLB->get_toggle(nPos++, CBCOL_FIRST));
- pAutoCorrect->SetAutoCorrFlag(ACFlags::ChgOrdinalNumber, m_xCheckLB->get_toggle(nPos++, CBCOL_FIRST));
+ pAutoCorrect->SetAutoCorrFlag(ACFlags::AddNonBrkSpace, m_xCheckLB->get_toggle(nPos++, CBCOL_FIRST) == TRISTATE_TRUE);
+ pAutoCorrect->SetAutoCorrFlag(ACFlags::ChgOrdinalNumber, m_xCheckLB->get_toggle(nPos++, CBCOL_FIRST) == TRISTATE_TRUE);
}
bool bModified = false;
@@ -1624,17 +1624,17 @@ bool OfaQuoteTabPage::FillItemSet( SfxItemSet* )
{
SvxSwAutoFormatFlags *pOpt = &pAutoCorrect->GetSwFlags();
- bool bCheck = m_xSwCheckLB->get_toggle(ADD_NONBRK_SPACE, CBCOL_FIRST);
+ bool bCheck = m_xSwCheckLB->get_toggle(ADD_NONBRK_SPACE, CBCOL_FIRST) == TRISTATE_TRUE;
bModified |= pOpt->bAddNonBrkSpace != bCheck;
pOpt->bAddNonBrkSpace = bCheck;
pAutoCorrect->SetAutoCorrFlag(ACFlags::AddNonBrkSpace,
- m_xSwCheckLB->get_toggle(ADD_NONBRK_SPACE, CBCOL_SECOND));
+ m_xSwCheckLB->get_toggle(ADD_NONBRK_SPACE, CBCOL_SECOND) == TRISTATE_TRUE);
- bCheck = m_xSwCheckLB->get_toggle(REPLACE_1ST, CBCOL_FIRST);
+ bCheck = m_xSwCheckLB->get_toggle(REPLACE_1ST, CBCOL_FIRST) == TRISTATE_TRUE;
bModified |= pOpt->bChgOrdinalNumber != bCheck;
pOpt->bChgOrdinalNumber = bCheck;
pAutoCorrect->SetAutoCorrFlag(ACFlags::ChgOrdinalNumber,
- m_xSwCheckLB->get_toggle(REPLACE_1ST, CBCOL_SECOND));
+ m_xSwCheckLB->get_toggle(REPLACE_1ST, CBCOL_SECOND) == TRISTATE_TRUE);
}
pAutoCorrect->SetAutoCorrFlag(ACFlags::ChgQuotes, m_xDoubleTypoCB->get_active());
@@ -1695,10 +1695,10 @@ void OfaQuoteTabPage::Reset( const SfxItemSet* )
CreateEntry(*m_xSwCheckLB, sNonBrkSpace, CBCOL_BOTH, 2);
CreateEntry(*m_xSwCheckLB, sOrdinal, CBCOL_BOTH, 2);
- m_xSwCheckLB->set_toggle(ADD_NONBRK_SPACE, pOpt->bAddNonBrkSpace, CBCOL_FIRST);
- m_xSwCheckLB->set_toggle(ADD_NONBRK_SPACE, bool(nFlags & ACFlags::AddNonBrkSpace), CBCOL_SECOND);
- m_xSwCheckLB->set_toggle(REPLACE_1ST, pOpt->bChgOrdinalNumber, CBCOL_FIRST);
- m_xSwCheckLB->set_toggle(REPLACE_1ST, bool(nFlags & ACFlags::ChgOrdinalNumber), CBCOL_SECOND);
+ m_xSwCheckLB->set_toggle(ADD_NONBRK_SPACE, pOpt->bAddNonBrkSpace ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST);
+ m_xSwCheckLB->set_toggle(ADD_NONBRK_SPACE, bool(nFlags & ACFlags::AddNonBrkSpace) ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_SECOND);
+ m_xSwCheckLB->set_toggle(REPLACE_1ST, pOpt->bChgOrdinalNumber ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST);
+ m_xSwCheckLB->set_toggle(REPLACE_1ST, bool(nFlags & ACFlags::ChgOrdinalNumber) ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_SECOND);
m_xSwCheckLB->thaw();
}
@@ -1713,8 +1713,8 @@ void OfaQuoteTabPage::Reset( const SfxItemSet* )
CreateEntry(*m_xCheckLB, sOrdinal, CBCOL_FIRST, 1);
int nPos = 0;
- m_xCheckLB->set_toggle(nPos++, bool(nFlags & ACFlags::AddNonBrkSpace), CBCOL_FIRST);
- m_xCheckLB->set_toggle(nPos++, bool(nFlags & ACFlags::ChgOrdinalNumber), CBCOL_FIRST);
+ m_xCheckLB->set_toggle(nPos++, bool(nFlags & ACFlags::AddNonBrkSpace) ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST);
+ m_xCheckLB->set_toggle(nPos++, bool(nFlags & ACFlags::ChgOrdinalNumber) ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST);
m_xCheckLB->thaw();
}
@@ -2208,7 +2208,7 @@ void OfaSmartTagOptionsTabPage::FillListBox( const SmartTagMgr& rSmartTagMgr )
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);
+ m_xSmartTagTypesLB->set_toggle(nRow, bCheck ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST);
m_xSmartTagTypesLB->set_text(nRow, aLBEntry, 1);
m_xSmartTagTypesLB->set_id(nRow, OUString::number(reinterpret_cast<sal_Int64>(new ImplSmartTagLBUserData(aSmartTagType, xRec, j))));
}
@@ -2283,7 +2283,7 @@ bool OfaSmartTagOptionsTabPage::FillItemSet( SfxItemSet* )
for (int i = 0; i < nCount; ++i)
{
const ImplSmartTagLBUserData* pUserData = reinterpret_cast<ImplSmartTagLBUserData*>(m_xSmartTagTypesLB->get_id(i).toInt64());
- const bool bChecked = m_xSmartTagTypesLB->get_toggle(i, CBCOL_FIRST);
+ const bool bChecked = m_xSmartTagTypesLB->get_toggle(i, CBCOL_FIRST) == TRISTATE_TRUE;
const bool bIsCurrentlyEnabled = pSmartTagMgr->IsSmartTagTypeEnabled( pUserData->maSmartTagType );
bModifiedSmartTagTypes = bModifiedSmartTagTypes || ( !bChecked != !bIsCurrentlyEnabled );
diff --git a/cui/uiconfig/ui/accelconfigpage.ui b/cui/uiconfig/ui/accelconfigpage.ui
index 6f248588023a..8d058c61bfda 100644
--- a/cui/uiconfig/ui/accelconfigpage.ui
+++ b/cui/uiconfig/ui/accelconfigpage.ui
@@ -26,7 +26,11 @@
<column type="gchararray"/>
<!-- column-name id -->
<column type="gchararray"/>
- <!-- column-name sensitive -->
+ <!-- column-name weight1 -->
+ <column type="gint"/>
+ <!-- column-name weight1 -->
+ <column type="gint"/>
+ <!-- column-name sensitive1 -->
<column type="gboolean"/>
</columns>
</object>
@@ -97,7 +101,7 @@
<child>
<object class="GtkCellRendererText" id="cellrenderer1"/>
<attributes>
- <attribute name="sensitive">3</attribute>
+ <attribute name="sensitive">5</attribute>
<attribute name="text">0</attribute>
</attributes>
</child>
diff --git a/cui/uiconfig/ui/acoroptionspage.ui b/cui/uiconfig/ui/acoroptionspage.ui
index 2bdc0bf3492d..045f394b16d3 100644
--- a/cui/uiconfig/ui/acoroptionspage.ui
+++ b/cui/uiconfig/ui/acoroptionspage.ui
@@ -12,6 +12,8 @@
<column type="gchararray"/>
<!-- column-name checkvis1 -->
<column type="gboolean"/>
+ <!-- column-name checktri1 -->
+ <column type="gboolean"/>
</columns>
</object>
<object class="GtkBox" id="AutocorrectOptionsPage">
diff --git a/cui/uiconfig/ui/applyautofmtpage.ui b/cui/uiconfig/ui/applyautofmtpage.ui
index 98528c5d13c1..45ca15dd7788 100644
--- a/cui/uiconfig/ui/applyautofmtpage.ui
+++ b/cui/uiconfig/ui/applyautofmtpage.ui
@@ -16,6 +16,10 @@
<column type="gboolean"/>
<!-- column-name checkvis2 -->
<column type="gboolean"/>
+ <!-- column-name checktri1 -->
+ <column type="gboolean"/>
+ <!-- column-name checktri2 -->
+ <column type="gboolean"/>
</columns>
</object>
<object class="GtkBox" id="ApplyAutoFmtPage">
diff --git a/cui/uiconfig/ui/applylocalizedpage.ui b/cui/uiconfig/ui/applylocalizedpage.ui
index 705a810f58db..6fec332aee47 100644
--- a/cui/uiconfig/ui/applylocalizedpage.ui
+++ b/cui/uiconfig/ui/applylocalizedpage.ui
@@ -16,6 +16,10 @@
<column type="gboolean"/>
<!-- column-name checkvis2 -->
<column type="gboolean"/>
+ <!-- column-name checktri1 -->
+ <column type="gboolean"/>
+ <!-- column-name checktri2 -->
+ <column type="gboolean"/>
</columns>
</object>
<object class="GtkTreeStore" id="liststore2">
@@ -28,6 +32,8 @@
<column type="gchararray"/>
<!-- column-name checkvis1 -->
<column type="gboolean"/>
+ <!-- column-name checktri1 -->
+ <column type="gboolean"/>
</columns>
</object>
<object class="GtkBox" id="ApplyLocalizedPage">
diff --git a/cui/uiconfig/ui/certdialog.ui b/cui/uiconfig/ui/certdialog.ui
index 8a90f1d32862..348e346856b5 100644
--- a/cui/uiconfig/ui/certdialog.ui
+++ b/cui/uiconfig/ui/certdialog.ui
@@ -14,6 +14,8 @@
<column type="gchararray"/>
<!-- column-name checkvis1 -->
<column type="gboolean"/>
+ <!-- column-name checktri1 -->
+ <column type="gboolean"/>
</columns>
</object>
<object class="GtkDialog" id="CertDialog">
diff --git a/cui/uiconfig/ui/hangulhanjaoptdialog.ui b/cui/uiconfig/ui/hangulhanjaoptdialog.ui
index 1fef474a30c1..c771f050903a 100644
--- a/cui/uiconfig/ui/hangulhanjaoptdialog.ui
+++ b/cui/uiconfig/ui/hangulhanjaoptdialog.ui
@@ -12,6 +12,8 @@
<column type="gchararray"/>
<!-- column-name checkvis1 -->
<column type="gboolean"/>
+ <!-- column-name checktri1 -->
+ <column type="gboolean"/>
</columns>
</object>
<object class="GtkDialog" id="HangulHanjaOptDialog">
diff --git a/cui/uiconfig/ui/menuassignpage.ui b/cui/uiconfig/ui/menuassignpage.ui
index 63c74abab271..e69080d09fe4 100644
--- a/cui/uiconfig/ui/menuassignpage.ui
+++ b/cui/uiconfig/ui/menuassignpage.ui
@@ -76,6 +76,8 @@
<column type="gchararray"/>
<!-- column-name checkvis1 -->
<column type="gboolean"/>
+ <!-- column-name checktri1 -->
+ <column type="gboolean"/>
</columns>
</object>
<object class="GtkTreeStore" id="liststore3">
diff --git a/cui/uiconfig/ui/multipathdialog.ui b/cui/uiconfig/ui/multipathdialog.ui
index 9275c13e4a34..0f1e73094e20 100644
--- a/cui/uiconfig/ui/multipathdialog.ui
+++ b/cui/uiconfig/ui/multipathdialog.ui
@@ -12,6 +12,8 @@
<column type="gchararray"/>
<!-- column-name checkvis1 -->
<column type="gboolean"/>
+ <!-- column-name checktri1 -->
+ <column type="gboolean"/>
</columns>
</object>
<object class="GtkDialog" id="MultiPathDialog">
diff --git a/cui/uiconfig/ui/optlingupage.ui b/cui/uiconfig/ui/optlingupage.ui
index f2331ecb58d9..215c8f67549c 100644
--- a/cui/uiconfig/ui/optlingupage.ui
+++ b/cui/uiconfig/ui/optlingupage.ui
@@ -12,6 +12,8 @@
<column type="gchararray"/>
<!-- column-name checkvis1 -->
<column type="gboolean"/>
+ <!-- column-name checktri1 -->
+ <column type="gboolean"/>
</columns>
</object>
<object class="GtkTreeStore" id="liststore3">
@@ -24,6 +26,8 @@
<column type="gchararray"/>
<!-- column-name checkvis1 -->
<column type="gboolean"/>
+ <!-- column-name checktri1 -->
+ <column type="gboolean"/>
</columns>
</object>
<object class="GtkTreeStore" id="liststore4">
@@ -36,6 +40,8 @@
<column type="gchararray"/>
<!-- column-name checkvis1 -->
<column type="gboolean"/>
+ <!-- column-name checktri1 -->
+ <column type="gboolean"/>
</columns>
</object>
<object class="GtkGrid" id="OptLinguPage">
diff --git a/cui/uiconfig/ui/searchattrdialog.ui b/cui/uiconfig/ui/searchattrdialog.ui
index f543ba732c8e..d67f41fe008b 100644
--- a/cui/uiconfig/ui/searchattrdialog.ui
+++ b/cui/uiconfig/ui/searchattrdialog.ui
@@ -12,6 +12,8 @@
<column type="gchararray"/>
<!-- column-name checkvis1 -->
<column type="gboolean"/>
+ <!-- column-name checktri1 -->
+ <column type="gboolean"/>
</columns>
</object>
<object class="GtkDialog" id="SearchAttrDialog">
diff --git a/cui/uiconfig/ui/smarttagoptionspage.ui b/cui/uiconfig/ui/smarttagoptionspage.ui
index b4e00e16a8a7..08cbb87ae8e6 100644
--- a/cui/uiconfig/ui/smarttagoptionspage.ui
+++ b/cui/uiconfig/ui/smarttagoptionspage.ui
@@ -12,6 +12,8 @@
<column type="gchararray"/>
<!-- column-name checkvis1 -->
<column type="gboolean"/>
+ <!-- column-name checktri1 -->
+ <column type="gboolean"/>
</columns>
</object>
<object class="GtkGrid" id="SmartTagOptionsPage">
diff --git a/dbaccess/source/ui/browser/unodatbr.cxx b/dbaccess/source/ui/browser/unodatbr.cxx
index ee49f5b1f3e6..31251082622e 100644
--- a/dbaccess/source/ui/browser/unodatbr.cxx
+++ b/dbaccess/source/ui/browser/unodatbr.cxx
@@ -1077,12 +1077,12 @@ namespace
virtual ~FilterByEntryDataId() {}
- virtual bool includeEntry( SvTreeListEntry* _pEntry ) const override;
+ virtual bool includeEntry(const void* pEntry) const override;
};
- bool FilterByEntryDataId::includeEntry( SvTreeListEntry* _pEntry ) const
+ bool FilterByEntryDataId::includeEntry(const void* pUserData) const
{
- DBTreeListUserData* pData = static_cast< DBTreeListUserData* >( _pEntry->GetUserData() );
+ const DBTreeListUserData* pData = static_cast<const DBTreeListUserData*>(pUserData);
return ( !pData || ( pData->sAccessor == sId ) );
}
}
diff --git a/dbaccess/source/ui/control/dbtreelistbox.cxx b/dbaccess/source/ui/control/dbtreelistbox.cxx
index 921130037653..0d8912d92bcb 100644
--- a/dbaccess/source/ui/control/dbtreelistbox.cxx
+++ b/dbaccess/source/ui/control/dbtreelistbox.cxx
@@ -117,7 +117,7 @@ SvTreeListEntry* DBTreeListBox::GetEntryPosByName( const OUString& aName, SvTree
if (pItem && pItem->GetText() == aName)
{
- if (!_pFilter || _pFilter->includeEntry(pEntry))
+ if (!_pFilter || _pFilter->includeEntry(pEntry->GetUserData()))
// found
break;
}
diff --git a/dbaccess/source/ui/control/tabletree.cxx b/dbaccess/source/ui/control/tabletree.cxx
index 9e8b7de36fb5..b89fa02bbe60 100644
--- a/dbaccess/source/ui/control/tabletree.cxx
+++ b/dbaccess/source/ui/control/tabletree.cxx
@@ -74,6 +74,15 @@ OTableTreeListBox::OTableTreeListBox(vcl::Window* pParent, WinBits nWinStyle)
implSetDefaultImages();
}
+TableTreeListBox::TableTreeListBox(std::unique_ptr<weld::TreeView> xTreeView)
+ : m_xImageProvider(new ImageProvider)
+ , m_bVirtualRoot(false)
+ , m_bNoEmptyFolders(false)
+ , m_xTreeView(std::move(xTreeView))
+{
+ m_xTreeView->make_sorted();
+}
+
VCL_BUILDER_FACTORY_CONSTRUCTOR(OTableTreeListBox, 0)
void OTableTreeListBox::implSetDefaultImages()
@@ -131,6 +140,12 @@ void OTableTreeListBox::implOnNewConnection( const Reference< XConnection >& _rx
m_xImageProvider.reset( new ImageProvider( m_xConnection ) );
}
+void TableTreeListBox::implOnNewConnection( const Reference< XConnection >& _rxConnection )
+{
+ m_xConnection = _rxConnection;
+ m_xImageProvider.reset( new ImageProvider( m_xConnection ) );
+}
+
void OTableTreeListBox::UpdateTableList( const Reference< XConnection >& _rxConnection )
{
Sequence< OUString > sTables, sViews;
@@ -173,6 +188,48 @@ void OTableTreeListBox::UpdateTableList( const Reference< XConnection >& _rxConn
UpdateTableList( _rxConnection, sTables, sViews );
}
+void TableTreeListBox::UpdateTableList( const Reference< XConnection >& _rxConnection )
+{
+ Sequence< OUString > sTables, sViews;
+
+ OUString sCurrentActionError;
+ try
+ {
+ Reference< XTablesSupplier > xTableSupp( _rxConnection, UNO_QUERY_THROW );
+ sCurrentActionError = DBA_RES(STR_NOTABLEINFO);
+
+ Reference< XNameAccess > xTables,xViews;
+
+ Reference< XViewsSupplier > xViewSupp( _rxConnection, UNO_QUERY );
+ if ( xViewSupp.is() )
+ {
+ xViews = xViewSupp->getViews();
+ if (xViews.is())
+ sViews = xViews->getElementNames();
+ }
+
+ xTables = xTableSupp->getTables();
+ if (xTables.is())
+ sTables = xTables->getElementNames();
+ }
+ catch(RuntimeException&)
+ {
+ OSL_FAIL("OTableTreeListBox::UpdateTableList : caught an RuntimeException!");
+ }
+ catch ( const SQLException& )
+ {
+ throw;
+ }
+ catch(Exception&)
+ {
+ css::uno::Any anyEx = cppu::getCaughtException();
+ // a non-SQLException exception occurred ... simply throw an SQLException
+ throw SQLException(sCurrentActionError, nullptr, "", 0, anyEx);
+ }
+
+ UpdateTableList( _rxConnection, sTables, sViews );
+}
+
namespace
{
struct OViewSetter
@@ -216,6 +273,27 @@ void OTableTreeListBox::UpdateTableList(
UpdateTableList( _rxConnection, aTables );
}
+void TableTreeListBox::UpdateTableList(
+ const Reference< XConnection >& _rxConnection,
+ const Sequence< OUString>& _rTables,
+ const Sequence< OUString>& _rViews
+ )
+{
+ TNames aTables;
+ aTables.resize(_rTables.getLength());
+ try
+ {
+ Reference< XDatabaseMetaData > xMeta( _rxConnection->getMetaData(), UNO_QUERY_THROW );
+ std::transform( _rTables.begin(), _rTables.end(),
+ aTables.begin(), OViewSetter( _rViews, xMeta->supportsMixedCaseQuotedIdentifiers() ) );
+ }
+ catch(Exception&)
+ {
+ DBG_UNHANDLED_EXCEPTION("dbaccess");
+ }
+ UpdateTableList( _rxConnection, aTables );
+}
+
namespace
{
std::vector< OUString > lcl_getMetaDataStrings_throw( const Reference< XResultSet >& _rxMetaDataResult, sal_Int32 _nColumnIndex )
@@ -305,6 +383,92 @@ void OTableTreeListBox::UpdateTableList( const Reference< XConnection >& _rxConn
}
}
+void TableTreeListBox::UpdateTableList( const Reference< XConnection >& _rxConnection, const TNames& _rTables )
+{
+ implOnNewConnection( _rxConnection );
+
+ // throw away all the old stuff
+ m_xTreeView->clear();
+
+ try
+ {
+ if (haveVirtualRoot())
+ {
+ OUString sRootEntryText;
+ if ( std::none_of(_rTables.begin(),_rTables.end(),
+ [] (const TNames::value_type& name) { return !name.second; }) )
+ sRootEntryText = DBA_RES(STR_ALL_TABLES);
+ else if ( std::none_of(_rTables.begin(),_rTables.end(),
+ [] (const TNames::value_type& name) { return name.second; }) )
+ sRootEntryText = DBA_RES(STR_ALL_VIEWS);
+ else
+ sRootEntryText = DBA_RES(STR_ALL_TABLES_AND_VIEWS);
+ OUString sId(OUString::number(DatabaseObjectContainer::TABLES));
+ OUString sImageId = ImageProvider::getFolderImageId(DatabaseObject::TABLE);
+ std::unique_ptr<weld::TreeIter> xRet(m_xTreeView->make_iterator());
+ m_xTreeView->insert(nullptr, -1, nullptr, &sId, nullptr, nullptr, nullptr, false, xRet.get());
+ m_xTreeView->set_image(*xRet, sImageId, -1);
+ m_xTreeView->set_toggle(*xRet, TRISTATE_FALSE, 0);
+ m_xTreeView->set_text(*xRet, sRootEntryText, 1);
+ }
+
+ if ( _rTables.empty() )
+ // nothing to do (besides inserting the root entry)
+ return;
+
+ // get the table/view names
+ Reference< XDatabaseMetaData > xMeta( _rxConnection->getMetaData(), UNO_QUERY_THROW );
+ for (auto const& table : _rTables)
+ {
+ // add the entry
+ implAddEntry(
+ xMeta,
+ table.first,
+ false
+ );
+ }
+
+ if ( !m_bNoEmptyFolders && lcl_shouldDisplayEmptySchemasAndCatalogs( _rxConnection ) )
+ {
+ bool bSupportsCatalogs = xMeta->supportsCatalogsInDataManipulation();
+ bool bSupportsSchemas = xMeta->supportsSchemasInDataManipulation();
+
+ if ( bSupportsCatalogs || bSupportsSchemas )
+ {
+ // we display empty catalogs if the DB supports catalogs, and they're noted at the beginning of a
+ // composed name. Otherwise, we display empty schematas. (also see the tree structure explained in
+ // implAddEntry)
+ bool bCatalogs = bSupportsCatalogs && xMeta->isCatalogAtStart();
+
+ std::vector< OUString > aFolderNames( lcl_getMetaDataStrings_throw(
+ bCatalogs ? xMeta->getCatalogs() : xMeta->getSchemas(), 1 ) );
+ sal_Int32 nFolderType = bCatalogs ? DatabaseObjectContainer::CATALOG : DatabaseObjectContainer::SCHEMA;
+
+ OUString sImageId = ImageProvider::getFolderImageId(DatabaseObject::TABLE);
+
+ std::unique_ptr<weld::TreeIter> xRootEntry(getAllObjectsEntry());
+ std::unique_ptr<weld::TreeIter> xRet(m_xTreeView->make_iterator());
+ for (auto const& folderName : aFolderNames)
+ {
+ std::unique_ptr<weld::TreeIter> xFolder(GetEntryPosByName(folderName, xRootEntry.get()));
+ if (!xFolder)
+ {
+ OUString sId(OUString::number(nFolderType));
+ m_xTreeView->insert(xRootEntry.get(), -1, nullptr, &sId, nullptr, nullptr, nullptr, false, xRet.get());
+ m_xTreeView->set_image(*xRet, sImageId, -1);
+ m_xTreeView->set_toggle(*xRet, TRISTATE_FALSE, 0);
+ m_xTreeView->set_text(*xRet, folderName, 1);
+ }
+ }
+ }
+ }
+ }
+ catch ( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION("dbaccess");
+ }
+}
+
bool OTableTreeListBox::isWildcardChecked(SvTreeListEntry* _pEntry)
{
if (_pEntry)
@@ -316,17 +480,39 @@ bool OTableTreeListBox::isWildcardChecked(SvTreeListEntry* _pEntry)
return false;
}
+bool TableTreeListBox::isWildcardChecked(weld::TreeIter& rEntry)
+{
+// return m_xTreeView->get_text_emphasis(rEntry, 2);
+ return m_xTreeView->get_text_emphasis(rEntry, 1);
+}
+
void OTableTreeListBox::checkWildcard(SvTreeListEntry* _pEntry)
{
SetCheckButtonState(_pEntry, SvButtonState::Checked);
checkedButton_noBroadcast(_pEntry);
}
+void TableTreeListBox::checkWildcard(weld::TreeIter& rEntry)
+{
+ m_xTreeView->set_toggle(rEntry, TRISTATE_TRUE, 0);
+ checkedButton_noBroadcast(rEntry);
+}
+
SvTreeListEntry* OTableTreeListBox::getAllObjectsEntry() const
{
return haveVirtualRoot() ? First() : nullptr;
}
+std::unique_ptr<weld::TreeIter> TableTreeListBox::getAllObjectsEntry() const
+{
+ if (!haveVirtualRoot())
+ return nullptr;
+ auto xRet = m_xTreeView->make_iterator();
+ if (!m_xTreeView->get_iter_first(*xRet))
+ return nullptr;
+ return xRet;
+}
+
void OTableTreeListBox::checkedButton_noBroadcast(SvTreeListEntry* _pEntry)
{
OMarkableTreeListBox::checkedButton_noBroadcast(_pEntry);
@@ -340,6 +526,52 @@ void OTableTreeListBox::checkedButton_noBroadcast(SvTreeListEntry* _pEntry)
implEmphasize(_pEntry, SvButtonState::Checked == eState);
}
+void TableTreeListBox::checkedButton_noBroadcast(weld::TreeIter& rEntry)
+{
+ TriState eState = m_xTreeView->get_toggle(rEntry, 0);
+ OSL_ENSURE(TRISTATE_INDET != eState, "OTableTreeListBox::CheckButtonHdl: user action which lead to TRISTATE?");
+
+ if (m_xTreeView->iter_has_child(rEntry)) // if it has children, check those too
+ {
+ std::unique_ptr<weld::TreeIter> xChildEntry(m_xTreeView->make_iterator(&rEntry));
+ std::unique_ptr<weld::TreeIter> xSiblingEntry(m_xTreeView->make_iterator(&rEntry));
+ bool bChildEntry = m_xTreeView->iter_next(*xChildEntry);
+ bool bSiblingEntry = m_xTreeView->iter_next_sibling(*xSiblingEntry);
+ while (bChildEntry && (!bSiblingEntry || !xChildEntry->equal(*xSiblingEntry)))
+ {
+ m_xTreeView->set_toggle(*xChildEntry, eState, 0);
+ bChildEntry = m_xTreeView->iter_next(*xChildEntry);
+ }
+ }
+
+ if (m_xTreeView->is_selected(rEntry))
+ {
+ m_xTreeView->selected_foreach([this, eState](weld::TreeIter& rSelected){
+ m_xTreeView->set_toggle(rSelected, eState, 0);
+ if (m_xTreeView->iter_has_child(rSelected)) // if it has children, check those too
+ {
+ std::unique_ptr<weld::TreeIter> xChildEntry(m_xTreeView->make_iterator(&rSelected));
+ std::unique_ptr<weld::TreeIter> xSiblingEntry(m_xTreeView->make_iterator(&rSelected));
+ bool bChildEntry = m_xTreeView->iter_next(*xChildEntry);
+ bool bSiblingEntry = m_xTreeView->iter_next_sibling(*xSiblingEntry);
+ while (bChildEntry && (!bSiblingEntry || !xChildEntry->equal(*xSiblingEntry)))
+ {
+ m_xTreeView->set_toggle(*xChildEntry, eState, 0);
+ bChildEntry = m_xTreeView->iter_next(*xChildEntry);
+ }
+ }
+ return false;
+ });
+ }
+
+ CheckButtons();
+
+ // if an entry has children, it makes a difference if the entry is checked
+ // because all children are checked or if the user checked it explicitly.
+ // So we track explicit (un)checking
+ implEmphasize(rEntry, eState == TRISTATE_TRUE);
+}
+
void OTableTreeListBox::implEmphasize(SvTreeListEntry* _pEntry, bool _bChecked, bool _bUpdateDescendants, bool _bUpdateAncestors)
{
OSL_ENSURE(_pEntry, "OTableTreeListBox::implEmphasize: invalid entry (NULL)!");
@@ -378,6 +610,39 @@ void OTableTreeListBox::implEmphasize(SvTreeListEntry* _pEntry, bool _bChecked,
}
}
+void TableTreeListBox::implEmphasize(weld::TreeIter& rEntry, bool _bChecked, bool _bUpdateDescendants, bool _bUpdateAncestors)
+{
+ // special emphasizing handling for the "all objects" entry
+ bool bAllObjectsEntryAffected = haveVirtualRoot() && (getAllObjectsEntry()->equal(rEntry));
+ if ( m_xTreeView->iter_has_child(rEntry) // the entry has children
+ || bAllObjectsEntryAffected // or it is the "all objects" entry
+ )
+ {
+ m_xTreeView->set_text_emphasis(rEntry, _bChecked, 1);
+ }
+
+ if (_bUpdateDescendants)
+ {
+ std::unique_ptr<weld::TreeIter> xChild(m_xTreeView->make_iterator(&rEntry));
+ // remove the mark for all children of the checked entry
+ bool bChildLoop = m_xTreeView->iter_children(*xChild);
+ while (bChildLoop)
+ {
+ if (m_xTreeView->iter_has_child(*xChild))
+ implEmphasize(*xChild, false, true, false);
+ bChildLoop = m_xTreeView->iter_next_sibling(*xChild);
+ }
+ }
+
+ if (_bUpdateAncestors)
+ {
+ std::unique_ptr<weld::TreeIter> xParent(m_xTreeView->make_iterator(&rEntry));
+ // remove the mark for all ancestors of the entry
+ if (m_xTreeView->iter_parent(*xParent))
+ implEmphasize(*xParent, false, false);
+ }
+}
+
void OTableTreeListBox::InitEntry(SvTreeListEntry* _pEntry, const OUString& _rString, const Image& _rCollapsedBitmap, const Image& _rExpandedBitmap, SvLBoxButtonKind _eButtonKind)
{
OMarkableTreeListBox::InitEntry(_pEntry, _rString, _rCollapsedBitmap, _rExpandedBitmap, _eButtonKind);
@@ -451,6 +716,86 @@ SvTreeListEntry* OTableTreeListBox::implAddEntry(
return pRet;
}
+void TableTreeListBox::implAddEntry(
+ const Reference< XDatabaseMetaData >& _rxMeta,
+ const OUString& _rTableName,
+ bool _bCheckName
+ )
+{
+ OSL_PRECOND( _rxMeta.is(), "OTableTreeListBox::implAddEntry: invalid meta data!" );
+ if ( !_rxMeta.is() )
+ return;
+
+ // split the complete name into its components
+ OUString sCatalog, sSchema, sName;
+ qualifiedNameComponents( _rxMeta, _rTableName, sCatalog, sSchema, sName, ::dbtools::EComposeRule::InDataManipulation );
+
+ std::unique_ptr<weld::TreeIter> xParentEntry(getAllObjectsEntry());
+
+ // if the DB uses catalog at the start of identifiers, then our hierarchy is
+ // catalog
+ // +- schema
+ // +- table
+ // else it is
+ // schema
+ // +- catalog
+ // +- table
+ bool bCatalogAtStart = _rxMeta->isCatalogAtStart();
+ const OUString& rFirstName = bCatalogAtStart ? sCatalog : sSchema;
+ const sal_Int32 nFirstFolderType = bCatalogAtStart ? DatabaseObjectContainer::CATALOG : DatabaseObjectContainer::SCHEMA;
+ const OUString& rSecondName = bCatalogAtStart ? sSchema : sCatalog;
+ const sal_Int32 nSecondFolderType = bCatalogAtStart ? DatabaseObjectContainer::SCHEMA : DatabaseObjectContainer::CATALOG;
+
+ if ( !rFirstName.isEmpty() )
+ {
+ std::unique_ptr<weld::TreeIter> xFolder(GetEntryPosByName(rFirstName, xParentEntry.get()));
+ if (!xFolder)
+ {
+ xFolder = m_xTreeView->make_iterator();
+ OUString sId(OUString::number(nFirstFolderType));
+ OUString sImageId = ImageProvider::getFolderImageId(DatabaseObject::TABLE);
+ m_xTreeView->insert(xParentEntry.get(), -1, nullptr, &sId, nullptr, nullptr, nullptr, false, xFolder.get());
+ m_xTreeView->set_image(*xFolder, sImageId, -1);
+ m_xTreeView->set_toggle(*xFolder, TRISTATE_FALSE, 0);
+ m_xTreeView->set_text(*xFolder, rFirstName, 1);
+ }
+ xParentEntry = std::move(xFolder);
+ }
+
+ if ( !rSecondName.isEmpty() )
+ {
+ std::unique_ptr<weld::TreeIter> xFolder(GetEntryPosByName(rSecondName, xParentEntry.get()));
+ if (!xFolder)
+ {
+ xFolder = m_xTreeView->make_iterator();
+ OUString sId(OUString::number(nSecondFolderType));
+ OUString sImageId = ImageProvider::getFolderImageId(DatabaseObject::TABLE);
+ m_xTreeView->insert(xParentEntry.get(), -1, nullptr, &sId, nullptr, nullptr, nullptr, false, xFolder.get());
+ m_xTreeView->set_image(*xFolder, sImageId, -1);
+ m_xTreeView->set_toggle(*xFolder, TRISTATE_FALSE, 0);
+ m_xTreeView->set_text(*xFolder, rSecondName, 1);
+ }
+ xParentEntry = std::move(xFolder);
+ }
+
+ if (!_bCheckName || !GetEntryPosByName(sName, xParentEntry.get()))
+ {
+ std::unique_ptr<weld::TreeIter> xEntry = m_xTreeView->make_iterator();
+ m_xTreeView->insert(xParentEntry.get(), -1, nullptr, nullptr, nullptr, nullptr, nullptr, false, xEntry.get());
+
+ auto xGraphic = m_xImageProvider->getXGraphic(_rTableName, DatabaseObject::TABLE);
+ if (xGraphic.is())
+ m_xTreeView->set_image(*xEntry, xGraphic, -1);
+ else
+ {
+ OUString sImageId(m_xImageProvider->getImageId(_rTableName, DatabaseObject::TABLE));
+ m_xTreeView->set_image(*xEntry, sImageId, -1);
+ }
+ m_xTreeView->set_toggle(*xEntry, TRISTATE_FALSE, 0);
+ m_xTreeView->set_text(*xEntry, sName, 1);
+ }
+}
+
NamedDatabaseObject OTableTreeListBox::describeObject( SvTreeListEntry* _pEntry )
{
NamedDatabaseObject aObject;
@@ -596,6 +941,107 @@ void OTableTreeListBox::removedTable( const OUString& _rName )
}
}
+std::unique_ptr<weld::TreeIter> TableTreeListBox::GetEntryPosByName(const OUString& aName, weld::TreeIter* pStart, const IEntryFilter* _pFilter) const
+{
+ auto xEntry(m_xTreeView->make_iterator(pStart));
+ if (!pStart && !m_xTreeView->get_iter_first(*xEntry))
+ return nullptr;
+
+ do
+ {
+ if (m_xTreeView->get_text(*xEntry) == aName)
+ {
+ if (!_pFilter || _pFilter->includeEntry(reinterpret_cast<void*>(m_xTreeView->get_id(*xEntry).toUInt64())))
+ {
+ // found
+ return xEntry;
+ }
+ }
+ } while (m_xTreeView->iter_next(*xEntry));
+
+ return nullptr;
+}
+
+void TableTreeListBox::CheckButtons()
+{
+ auto xEntry(m_xTreeView->make_iterator());
+ if (!m_xTreeView->get_iter_first(*xEntry))
+ return;
+
+ do
+ {
+ implDetermineState(*xEntry);
+ } while (m_xTreeView->iter_next_sibling(*xEntry));
+}
+
+TriState TableTreeListBox::implDetermineState(weld::TreeIter& rEntry)
+{
+ TriState eState = m_xTreeView->get_toggle(rEntry, 0);
+ if (!m_xTreeView->iter_has_child(rEntry))
+ // nothing to do in this bottom-up routine if there are no children ...
+ return eState;
+
+ // loop through the children and check their states
+ sal_uInt16 nCheckedChildren = 0;
+ sal_uInt16 nChildrenOverall = 0;
+
+ std::unique_ptr<weld::TreeIter> xChild(m_xTreeView->make_iterator(&rEntry));
+ bool bChildLoop = m_xTreeView->iter_children(*xChild);
+ while (bChildLoop)
+ {
+ TriState eChildState = implDetermineState(*xChild);
+ if (eChildState == TRISTATE_INDET)
+ break;
+ if (eChildState == TRISTATE_TRUE)
+ ++nCheckedChildren;
+ ++nChildrenOverall;
+ bChildLoop = m_xTreeView->iter_next_sibling(*xChild);
+ }
+
+ if (bChildLoop)
+ {
+ // we did not finish the loop because at least one of the children is in tristate
+ eState = TRISTATE_INDET;
+
+ // but this means that we did not finish all the siblings of pChildLoop,
+ // so their checking may be incorrect at the moment
+ // -> correct this
+ while (bChildLoop)
+ {
+ implDetermineState(*xChild);
+ bChildLoop = m_xTreeView->iter_next_sibling(*xChild);
+ }
+ }
+ else
+ {
+ // none if the children are in tristate
+ if (nCheckedChildren)
+ {
+ // we have at least one child checked
+ if (nCheckedChildren != nChildrenOverall)
+ {
+ // not all children are checked
+ eState = TRISTATE_INDET;
+ }
+ else
+ {
+ // all children are checked
+ eState = TRISTATE_TRUE;
+ }
+ }
+ else
+ {
+ // no children are checked
+ eState = TRISTATE_FALSE;
+ }
+ }
+
+ // finally set the entry to the state we just determined
+ m_xTreeView->set_toggle(rEntry, eState, 0);
+
+ return eState;
+}
+
} // namespace dbaui
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/dbaccess/source/ui/dlg/tablespage.cxx b/dbaccess/source/ui/dlg/tablespage.cxx
index 233157aa66f0..d5b8ec000344 100644
--- a/dbaccess/source/ui/dlg/tablespage.cxx
+++ b/dbaccess/source/ui/dlg/tablespage.cxx
@@ -66,32 +66,25 @@ namespace dbaui
using namespace ::comphelper;
// OTableSubscriptionPage
- OTableSubscriptionPage::OTableSubscriptionPage(vcl::Window* pParent, const SfxItemSet& _rCoreAttrs,
+ OTableSubscriptionPage::OTableSubscriptionPage(TabPageParent pParent, const SfxItemSet& _rCoreAttrs,
OTableSubscriptionDialog* _pTablesDlg)
- : OGenericAdministrationPage(pParent, "TablesFilterPage",
- "dbaccess/ui/tablesfilterpage.ui", _rCoreAttrs)
+ : OGenericAdministrationPage(pParent, "dbaccess/ui/tablesfilterpage.ui", "TablesFilterPage", _rCoreAttrs)
, m_bCatalogAtStart(true)
, m_pTablesDlg(_pTablesDlg)
+ , m_xTables(m_xBuilder->weld_widget("TablesFilterPage"))
+ , m_xTablesList(new TableTreeListBox(m_xBuilder->weld_tree_view("treeview")))
{
- get(m_pTables, "TablesFilterPage");
+ m_xTablesList->init();
- get(m_pTablesList, "treeview");
- m_pTablesList->init();
- m_pTablesList->set_width_request(56 * m_pTablesList->approximate_char_width());
- m_pTablesList->set_height_request(12 * m_pTablesList->GetTextHeight());
+ weld::TreeView& rWidget = m_xTablesList->GetWidget();
- m_pTablesList->SetCheckHandler(LINK(this,OGenericAdministrationPage,OnControlModified));
+ rWidget.set_size_request(rWidget.get_approximate_digit_width() * 48,
+ rWidget.get_height_rows(12));
// initialize the TabListBox
- m_pTablesList->SetSelectionMode( SelectionMode::Multiple );
- m_pTablesList->SetDragDropMode( DragDropMode::NONE );
- m_pTablesList->EnableInplaceEditing( false );
- m_pTablesList->SetStyle(m_pTablesList->GetStyle() | WB_BORDER | WB_HASLINES | WB_HASLINESATROOT | WB_SORT | WB_HASBUTTONS | WB_HSCROLL |WB_HASBUTTONSATROOT);
+ rWidget.set_selection_mode(SelectionMode::Multiple);
- m_pTablesList->Clear();
-
- m_pTablesList->SetCheckButtonHdl(LINK(this, OTableSubscriptionPage, OnTreeEntryButtonChecked));
- m_pTablesList->SetCheckHandler(LINK(this, OTableSubscriptionPage, OnTreeEntryChecked));
+ rWidget.connect_toggled(LINK(this, OTableSubscriptionPage, OnTreeEntryChecked));
}
OTableSubscriptionPage::~OTableSubscriptionPage()
@@ -107,34 +100,10 @@ namespace dbaui
::comphelper::disposeComponent(m_xCurrentConnection);
}
catch (RuntimeException&) { }
- m_pTables.clear();
- m_pTablesList.clear();
m_pTablesDlg.clear();
OGenericAdministrationPage::dispose();
}
- void OTableSubscriptionPage::StateChanged( StateChangedType nType )
- {
- OGenericAdministrationPage::StateChanged( nType );
-
- if ( nType == StateChangedType::ControlBackground )
- {
- // Check if we need to get new images for normal/high contrast mode
- m_pTablesList->notifyHiContrastChanged();
- }
- }
- void OTableSubscriptionPage::DataChanged( const DataChangedEvent& rDCEvt )
- {
- OGenericAdministrationPage::DataChanged( rDCEvt );
-
- if ((( rDCEvt.GetType() == DataChangedEventType::SETTINGS ) ||
- ( rDCEvt.GetType() == DataChangedEventType::DISPLAY )) &&
- ( rDCEvt.GetFlags() & AllSettingsFlags::STYLE ))
- {
- // Check if we need to get new images for normal/high contrast mode
- m_pTablesList->notifyHiContrastChanged();
- }
- }
void OTableSubscriptionPage::implCheckTables(const Sequence< OUString >& _rTables)
{
// the meta data for the current connection, used for splitting up table names
@@ -155,7 +124,7 @@ namespace dbaui
// check the ones which are in the list
OUString sCatalog, sSchema, sName;
- SvTreeListEntry* pRootEntry = m_pTablesList->getAllObjectsEntry();
+ std::unique_ptr<weld::TreeIter> xRootEntry(m_xTablesList->getAllObjectsEntry());
for (const OUString& rIncludeTable : _rTables)
{
@@ -168,34 +137,34 @@ namespace dbaui
bool bAllSchemas = (1 == sSchema.getLength()) && ('%' == sSchema[0]);
// the catalog entry
- SvTreeListEntry* pCatalog = m_pTablesList->GetEntryPosByName(sCatalog, pRootEntry);
- if (!(pCatalog || sCatalog.isEmpty()))
+ std::unique_ptr<weld::TreeIter> xCatalog(m_xTablesList->GetEntryPosByName(sCatalog, xRootEntry.get()));
+ if (!(xCatalog || sCatalog.isEmpty()))
// the table (resp. its catalog) referred in this filter entry does not exist anymore
continue;
- if (bAllSchemas && pCatalog)
+ if (bAllSchemas && xCatalog)
{
- m_pTablesList->checkWildcard(pCatalog);
+ m_xTablesList->checkWildcard(*xCatalog);
continue;
}
// the schema entry
- SvTreeListEntry* pSchema = m_pTablesList->GetEntryPosByName(sSchema, (pCatalog ? pCatalog : pRootEntry));
- if (!(pSchema || sSchema.isEmpty()))
+ std::unique_ptr<weld::TreeIter> xSchema = m_xTablesList->GetEntryPosByName(sSchema, (xCatalog ? xCatalog.get() : xRootEntry.get()));
+ if (!(xSchema || sSchema.isEmpty()))
// the table (resp. its schema) referred in this filter entry does not exist anymore
continue;
- if (bAllTables && pSchema)
+ if (bAllTables && xSchema)
{
- m_pTablesList->checkWildcard(pSchema);
+ m_xTablesList->checkWildcard(*xSchema);
continue;
}
- SvTreeListEntry* pEntry = m_pTablesList->GetEntryPosByName(sName, pSchema ? pSchema : (pCatalog ? pCatalog : pRootEntry) );
- if (pEntry)
- m_pTablesList->SetCheckButtonState(pEntry, SvButtonState::Checked);
+ std::unique_ptr<weld::TreeIter> xEntry(m_xTablesList->GetEntryPosByName(sName, xSchema ? xSchema.get() : (xCatalog ? xCatalog.get() : xRootEntry.get())));
+ if (xEntry)
+ m_xTablesList->GetWidget().set_toggle(*xEntry, TRISTATE_TRUE, 0);
}
- m_pTablesList->CheckButtons();
+ m_xTablesList->CheckButtons();
}
void OTableSubscriptionPage::implCompleteTablesCheck( const css::uno::Sequence< OUString >& _rTableFilter )
@@ -236,7 +205,7 @@ namespace dbaui
{
if (!m_pTablesDlg->getCurrentSettings(aConnectionParams))
{
- m_pTablesList->Clear();
+ m_xTablesList->GetWidget().clear();
m_pTablesDlg->endExecution();
return;
}
@@ -265,9 +234,8 @@ namespace dbaui
try
{
- WaitObject aWaitCursor(this);
- m_pTablesList->GetModel()->SetSortMode(SortAscending);
- m_pTablesList->GetModel()->SetCompareHdl(LINK(this, OTableSubscriptionPage, OnTreeEntryCompare));
+ weld::WaitObject aWaitCursor(GetDialogFrameWeld());
+ m_xTablesList->GetWidget().set_sort_order(false);
Reference<XPropertySet> xProp = m_pTablesDlg->getCurrentDataSource();
OSL_ENSURE(xProp.is(),"No data source set!");
@@ -296,7 +264,7 @@ namespace dbaui
if ( m_xCurrentConnection.is() )
{
- m_pTablesList->UpdateTableList( m_xCurrentConnection );
+ m_xTablesList->UpdateTableList( m_xCurrentConnection );
if (m_pTablesDlg)
m_pTablesDlg->successfullyConnected();
}
@@ -312,8 +280,8 @@ namespace dbaui
vcl::Window *pParent = GetParentDialog();
OSQLMessageBox aMessageBox(pParent ? pParent->GetFrameWeld() : nullptr, aErrorInfo);
aMessageBox.run();
- m_pTables->Enable(false);
- m_pTablesList->Clear();
+ m_xTables->set_sensitive(false);
+ m_xTablesList->GetWidget().clear();
if ( m_pTablesDlg )
{
@@ -353,13 +321,15 @@ namespace dbaui
implCompleteTablesCheck( aTableFilter );
// expand the first entry by default
- SvTreeListEntry* pExpand = m_pTablesList->getAllObjectsEntry();
- while (pExpand)
+ std::unique_ptr<weld::TreeIter> xExpand = m_xTablesList->getAllObjectsEntry();
+ while (xExpand)
{
- m_pTablesList->Expand(pExpand);
- pExpand = m_pTablesList->FirstChild(pExpand);
- if (pExpand && pExpand->NextSibling())
- pExpand = nullptr;
+ m_xTablesList->GetWidget().expand_row(*xExpand);
+ if (!m_xTablesList->GetWidget().iter_children(*xExpand))
+ break;
+ std::unique_ptr<weld::TreeIter> xSibling(m_xTablesList->GetWidget().make_iterator(xExpand.get()));
+ if (m_xTablesList->GetWidget().iter_next_sibling(*xSibling))
+ xExpand.reset();
}
// update the toolbox according the current selection and check state
@@ -368,16 +338,22 @@ namespace dbaui
void OTableSubscriptionPage::CheckAll( bool _bCheck )
{
- SvButtonState eState = _bCheck ? SvButtonState::Checked : SvButtonState::Unchecked;
- SvTreeListEntry* pEntry = m_pTablesList->First();
- while (pEntry)
+ std::unique_ptr<weld::TreeIter> xEntry(m_xTablesList->GetWidget().make_iterator());
+ if (m_xTablesList->GetWidget().get_iter_first(*xEntry))
{
- m_pTablesList->SetCheckButtonState( pEntry, eState);
- pEntry = m_pTablesList->Next(pEntry);
+ do
+ {
+ m_xTablesList->GetWidget().set_toggle(*xEntry, _bCheck ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
+ }
+ while (m_xTablesList->GetWidget().iter_next(*xEntry));
}
- if (_bCheck && m_pTablesList->getAllObjectsEntry())
- m_pTablesList->checkWildcard(m_pTablesList->getAllObjectsEntry());
+ if (_bCheck)
+ {
+ auto xRoot = m_xTablesList->getAllObjectsEntry();
+ if (xRoot)
+ m_xTablesList->checkWildcard(*xRoot);
+ }
}
DeactivateRC OTableSubscriptionPage::DeactivatePage(SfxItemSet* _pSet)
@@ -393,88 +369,66 @@ namespace dbaui
return nResult;
}
- IMPL_LINK_NOARG( OTableSubscriptionPage, OnTreeEntryButtonChecked, SvTreeListBox*, void )
+
+ IMPL_LINK_NOARG(OTableSubscriptionPage, OnTreeEntryChecked, const row_col&, void)
{
+ weld::TreeView& rTreeView = m_xTablesList->GetWidget();
+ std::unique_ptr<weld::TreeIter> xEntry(rTreeView.make_iterator());
+ if (rTreeView.get_cursor(xEntry.get()))
+ m_xTablesList->checkedButton_noBroadcast(*xEntry);
callModifiedHdl();
}
- IMPL_LINK( OTableSubscriptionPage, OnTreeEntryChecked, void*, _pControl, void )
- {
- OnControlModified(_pControl);
- }
- IMPL_LINK( OTableSubscriptionPage, OnTreeEntryCompare, const SvSortData&, _rSortData, sal_Int32 )
- {
- const SvTreeListEntry* pLHS = _rSortData.pLeft;
- const SvTreeListEntry* pRHS = _rSortData.pRight;
- OSL_ENSURE(pLHS && pRHS, "SbaTableQueryBrowser::OnTreeEntryCompare: invalid tree entries!");
-
- const SvLBoxString* pLeftTextItem = static_cast<const SvLBoxString*>(pLHS->GetFirstItem(SvLBoxItemType::String));
- const SvLBoxString* pRightTextItem = static_cast<const SvLBoxString*>(pRHS->GetFirstItem(SvLBoxItemType::String));
- OSL_ENSURE(pLeftTextItem && pRightTextItem, "SbaTableQueryBrowser::OnTreeEntryCompare: invalid text items!");
-
- OUString sLeftText = pLeftTextItem->GetText();
- OUString sRightText = pRightTextItem->GetText();
-
- sal_Int32 nCompareResult = 0; // equal by default
-
- if (m_xCollator.is())
- {
- try
- {
- nCompareResult = m_xCollator->compareString(sLeftText, sRightText);
- }
- catch(Exception&)
- {
- }
- }
- else
- // default behaviour if we do not have a collator -> do the simple string compare
- nCompareResult = sLeftText.compareTo(sRightText);
-
- return nCompareResult;
- }
Sequence< OUString > OTableSubscriptionPage::collectDetailedSelection() const
{
Sequence< OUString > aTableFilter;
static const char sWildcard[] = "%";
- const SvTreeListEntry* pAllObjectsEntry = m_pTablesList->getAllObjectsEntry();
- if (!pAllObjectsEntry)
+ std::unique_ptr<weld::TreeIter> xAllObjectsEntry(m_xTablesList->getAllObjectsEntry());
+ if (!xAllObjectsEntry)
return aTableFilter;
- SvTreeListEntry* pEntry = m_pTablesList->GetModel()->Next(const_cast<SvTreeListEntry*>(pAllObjectsEntry));
- while(pEntry)
+ std::unique_ptr<weld::TreeIter> xEntry(m_xTablesList->GetWidget().make_iterator(xAllObjectsEntry.get()));
+ if (!m_xTablesList->GetWidget().iter_next(*xEntry))
+ xEntry.reset();
+ while (xEntry)
{
bool bCatalogWildcard = false;
bool bSchemaWildcard = false;
- SvTreeListEntry* pSchema = nullptr;
- SvTreeListEntry* pCatalog = nullptr;
+ std::unique_ptr<weld::TreeIter> xSchema;
+ std::unique_ptr<weld::TreeIter> xCatalog;
- if (m_pTablesList->GetCheckButtonState(pEntry) == SvButtonState::Checked && !m_pTablesList->GetModel()->HasChildren(pEntry))
+ if (m_xTablesList->GetWidget().get_toggle(*xEntry, 0) == TRISTATE_TRUE && !m_xTablesList->GetWidget().iter_has_child(*xEntry))
{ // checked and a leaf, which means it's no catalog, no schema, but a real table
OUStringBuffer sComposedName;
OUString sCatalog;
- if(m_pTablesList->GetModel()->HasParent(pEntry))
+ if (m_xTablesList->GetWidget().get_iter_depth(*xEntry))
{
- pSchema = m_pTablesList->GetModel()->GetParent(pEntry);
- if (pAllObjectsEntry == pSchema)
+ xSchema = m_xTablesList->GetWidget().make_iterator(xEntry.get());
+ m_xTablesList->GetWidget().iter_parent(*xSchema);
+ if (xAllObjectsEntry->equal(*xSchema))
+ {
// do not want to have the root entry
- pSchema = nullptr;
+ xSchema.reset();
+ }
- if (pSchema)
+ if (xSchema)
{ // it's a real schema entry, not the "all objects" root
- if(m_pTablesList->GetModel()->HasParent(pSchema))
+ if (m_xTablesList->GetWidget().get_iter_depth(*xSchema))
{
- pCatalog = m_pTablesList->GetModel()->GetParent(pSchema);
- if (pAllObjectsEntry == pCatalog)
+ xCatalog = m_xTablesList->GetWidget().make_iterator(xSchema.get());
+ m_xTablesList->GetWidget().iter_parent(*xCatalog);
+ if (xAllObjectsEntry->equal(*xCatalog))
+ {
// do not want to have the root entry
- pCatalog = nullptr;
+ xCatalog.reset();
+ }
- if (pCatalog)
+ if (xCatalog)
{ // it's a real catalog entry, not the "all objects" root
- bCatalogWildcard = OTableTreeListBox::isWildcardChecked(pCatalog);
+ bCatalogWildcard = m_xTablesList->isWildcardChecked(*xCatalog);
if (m_bCatalogAtStart)
{
- sComposedName.append(m_pTablesList->GetEntryText( pCatalog )).append(m_sCatalogSeparator);
+ sComposedName.append(m_xTablesList->GetWidget().get_text(*xCatalog)).append(m_sCatalogSeparator);
if (bCatalogWildcard)
sComposedName.append(sWildcard);
}
@@ -484,19 +438,19 @@ namespace dbaui
sCatalog = sWildcard;
else
sCatalog.clear();
- sCatalog += m_sCatalogSeparator + m_pTablesList->GetEntryText( pCatalog );
+ sCatalog += m_sCatalogSeparator + m_xTablesList->GetWidget().get_text(*xCatalog) ;
}
}
}
- bSchemaWildcard = OTableTreeListBox::isWildcardChecked(pSchema);
- sComposedName.append(m_pTablesList->GetEntryText( pSchema )).append(".");
+ bSchemaWildcard = m_xTablesList->isWildcardChecked(*xSchema);
+ sComposedName.append(m_xTablesList->GetWidget().get_text(*xSchema)).append(".");
}
if (bSchemaWildcard)
sComposedName.append(sWildcard);
}
if (!bSchemaWildcard && !bCatalogWildcard)
- sComposedName.append(m_pTablesList->GetEntryText( pEntry ));
+ sComposedName.append(m_xTablesList->GetWidget().get_text(*xEntry));
if (!m_bCatalogAtStart && !bCatalogWildcard)
sComposedName.append(sCatalog);
@@ -509,26 +463,35 @@ namespace dbaui
}
if (bCatalogWildcard)
- pEntry = implNextSibling(pCatalog);
+ xEntry = implNextSibling(xCatalog.get());
else if (bSchemaWildcard)
- pEntry = implNextSibling(pSchema);
+ xEntry = implNextSibling(xSchema.get());
else
- pEntry = m_pTablesList->GetModel()->Next(pEntry);
+ {
+ if (!m_xTablesList->GetWidget().iter_next(*xEntry))
+ xEntry.reset();
+ }
}
return aTableFilter;
}
- SvTreeListEntry* OTableSubscriptionPage::implNextSibling(SvTreeListEntry* _pEntry) const
+ std::unique_ptr<weld::TreeIter> OTableSubscriptionPage::implNextSibling(weld::TreeIter* pEntry) const
{
- SvTreeListEntry* pReturn = nullptr;
- if (_pEntry)
+ std::unique_ptr<weld::TreeIter> xReturn;
+ if (pEntry)
{
- pReturn = _pEntry->NextSibling();
- if (!pReturn)
- pReturn = implNextSibling(m_pTablesList->GetParent(_pEntry));
+ xReturn = m_xTablesList->GetWidget().make_iterator(pEntry);
+ if (!m_xTablesList->GetWidget().iter_next_sibling(*xReturn))
+ {
+ std::unique_ptr<weld::TreeIter> xParent = m_xTablesList->GetWidget().make_iterator(pEntry);
+ if (m_xTablesList->GetWidget().iter_parent(*xParent))
+ xReturn = implNextSibling(xParent.get());
+ else
+ xReturn.reset();
+ }
}
- return pReturn;
+ return xReturn;
}
bool OTableSubscriptionPage::FillItemSet( SfxItemSet* _rCoreAttrs )
@@ -544,7 +507,8 @@ namespace dbaui
if ( m_xCurrentConnection.is() )
{ // collect the table filter data only if we have a connection - else no tables are displayed at all
Sequence< OUString > aTableFilter;
- if (dbaui::OTableTreeListBox::isWildcardChecked(m_pTablesList->getAllObjectsEntry()))
+ auto xRoot = m_xTablesList->getAllObjectsEntry();
+ if (xRoot && m_xTablesList->isWildcardChecked(*xRoot))
{
aTableFilter.realloc(1);
aTableFilter[0] = "%";
@@ -565,7 +529,7 @@ namespace dbaui
void OTableSubscriptionPage::fillWindows(std::vector< std::unique_ptr<ISaveValueWrapper> >& _rControlList)
{
- _rControlList.emplace_back(new ODisableWrapper<VclContainer>(m_pTables));
+ _rControlList.emplace_back(new ODisableWidgetWrapper<weld::Widget>(m_xTables.get()));
}
} // namespace dbaui
diff --git a/dbaccess/source/ui/dlg/tablespage.hxx b/dbaccess/source/ui/dlg/tablespage.hxx
index aaaebdb01acb..d432b1f917b6 100644
--- a/dbaccess/source/ui/dlg/tablespage.hxx
+++ b/dbaccess/source/ui/dlg/tablespage.hxx
@@ -35,9 +35,6 @@ namespace dbaui
:public OGenericAdministrationPage
{
private:
- VclPtr<VclContainer> m_pTables;
- VclPtr<OTableTreeListBox> m_pTablesList;
-
OUString m_sCatalogSeparator;
bool m_bCatalogAtStart : 1;
@@ -47,15 +44,15 @@ namespace dbaui
m_xCollator;
VclPtr<OTableSubscriptionDialog> m_pTablesDlg;
+ std::unique_ptr<weld::Widget> m_xTables;
+ std::unique_ptr<TableTreeListBox> m_xTablesList;
+
public:
virtual bool FillItemSet(SfxItemSet* _rCoreAttrs) override;
virtual DeactivateRC DeactivatePage(SfxItemSet* _pSet) override;
using OGenericAdministrationPage::DeactivatePage;
- virtual void StateChanged( StateChangedType nStateChange ) override;
- virtual void DataChanged( const DataChangedEvent& rDCEvt ) override;
-
- OTableSubscriptionPage( vcl::Window* pParent, const SfxItemSet& _rCoreAttrs ,OTableSubscriptionDialog* _pTablesDlg);
+ OTableSubscriptionPage(TabPageParent pParent, const SfxItemSet& _rCoreAttrs ,OTableSubscriptionDialog* _pTablesDlg);
virtual ~OTableSubscriptionPage() override;
virtual void dispose() override;
@@ -63,16 +60,15 @@ namespace dbaui
virtual void fillControls(std::vector< std::unique_ptr<ISaveValueWrapper> >& _rControlList) override;
virtual void fillWindows(std::vector< std::unique_ptr<ISaveValueWrapper> >& _rControlList) override;
- DECL_LINK( OnTreeEntryCompare, const SvSortData&, sal_Int32 );
- DECL_LINK( OnTreeEntryChecked, void*, void );
- DECL_LINK( OnTreeEntryButtonChecked, SvTreeListBox*, void );
+ typedef std::pair<int, int> row_col;
+ DECL_LINK(OnTreeEntryChecked, const row_col&, void);
/** check the tables in <member>m_aTablesList</member> according to <arg>_rTables</arg>
*/
void implCheckTables(const css::uno::Sequence< OUString >& _rTables);
/// returns the next sibling, if not available, the next sibling of the parent, a.s.o.
- SvTreeListEntry* implNextSibling(SvTreeListEntry* _pEntry) const;
+ std::unique_ptr<weld::TreeIter> implNextSibling(weld::TreeIter* pEntry) const;
/** return the current selection in <member>m_aTablesList</member>
*/
diff --git a/dbaccess/source/ui/inc/dbtreelistbox.hxx b/dbaccess/source/ui/inc/dbtreelistbox.hxx
index 7e3beb87d480..f66b07a5ffc2 100644
--- a/dbaccess/source/ui/inc/dbtreelistbox.hxx
+++ b/dbaccess/source/ui/inc/dbtreelistbox.hxx
@@ -26,6 +26,7 @@
#include <vcl/treelistbox.hxx>
#include <vcl/timer.hxx>
+#include <vcl/weld.hxx>
#include <memory>
#include <set>
@@ -40,7 +41,7 @@ namespace dbaui
class IEntryFilter
{
public:
- virtual bool includeEntry( SvTreeListEntry* _pEntry ) const = 0;
+ virtual bool includeEntry(const void* pUserData) const = 0;
protected:
~IEntryFilter() {}
diff --git a/dbaccess/source/ui/inc/imageprovider.hxx b/dbaccess/source/ui/inc/imageprovider.hxx
index d9e7b53e55b3..ee8a5a44d8d6 100644
--- a/dbaccess/source/ui/inc/imageprovider.hxx
+++ b/dbaccess/source/ui/inc/imageprovider.hxx
@@ -22,6 +22,7 @@
#include <vcl/image.hxx>
+#include <com/sun/star/graphic/XGraphic.hpp>
#include <com/sun/star/sdbc/XConnection.hpp>
#include <com/sun/star/sdb/application/DatabaseObject.hpp>
@@ -77,6 +78,15 @@ namespace dbaui
Image& _out_rImage
);
+ OUString getImageId(
+ const OUString& _rName,
+ const sal_Int32 _nDatabaseObjectType
+ );
+
+ // check whether the connection can give us an icon
+ css::uno::Reference<css::graphic::XGraphic> getXGraphic(const OUString& _rName,
+ const sal_Int32 _nDatabaseObjectType);
+
/** returns the default image to be used for a database object
In opposite to getImages, this method does not check the concrete object
@@ -119,6 +129,9 @@ namespace dbaui
static Image getFolderImage(
sal_Int32 _nDatabaseObjectType
);
+ static OUString getFolderImageId(
+ sal_Int32 _nDatabaseObjectType
+ );
/** retrieves the image to be used for a database as a whole.
@return
diff --git a/dbaccess/source/ui/inc/tabletree.hxx b/dbaccess/source/ui/inc/tabletree.hxx
index 22047acba375..e5f9e32a5e21 100644
--- a/dbaccess/source/ui/inc/tabletree.hxx
+++ b/dbaccess/source/ui/inc/tabletree.hxx
@@ -29,6 +29,7 @@
#include <com/sun/star/sdbc/XConnection.hpp>
#include <com/sun/star/sdbc/XDriver.hpp>
#include <com/sun/star/sdb/application/NamedDatabaseObject.hpp>
+#include <vcl/weld.hxx>
#include <memory>
namespace dbaui
@@ -118,7 +119,7 @@ public:
/** determine if the given entry is 'wildcard checked'
@see checkWildcard
*/
- static bool isWildcardChecked(SvTreeListEntry* _pEntry);
+ static bool isWildcardChecked(SvTreeListEntry* pEntry);
private:
virtual void InitEntry(SvTreeListEntry* _pEntry, const OUString& _rString, const Image& _rCollapsedBitmap, const Image& _rExpandedBitmap, SvLBoxButtonKind _eButtonKind) override;
@@ -158,6 +159,126 @@ private:
};
+class TableTreeListBox
+{
+ css::uno::Reference< css::sdbc::XConnection >
+ m_xConnection; // the connection we're working for, set in implOnNewConnection, called by UpdateTableList
+ std::unique_ptr< ImageProvider >
+ m_xImageProvider; // provider for our images
+ bool m_bVirtualRoot; // should the first entry be visible
+ bool m_bNoEmptyFolders; // should empty catalogs/schematas be prevented from being displayed?
+ std::unique_ptr<weld::TreeView> m_xTreeView;
+
+public:
+ TableTreeListBox(std::unique_ptr<weld::TreeView> xTreeView);
+
+ weld::TreeView& GetWidget() { return *m_xTreeView; }
+
+ void init() { m_bVirtualRoot = true; }
+
+ typedef std::pair< OUString, bool > TTableViewName;
+ typedef std::vector< TTableViewName > TNames;
+
+ void suppressEmptyFolders() { m_bNoEmptyFolders = true; }
+
+ /** determines whether the given entry denotes a tables folder
+ */
+ static bool isFolderEntry( const SvTreeListEntry* _pEntry );
+
+ /** fill the table list with the tables belonging to the connection described by the parameters
+ @param _rxConnection
+ the connection, which must support the service com.sun.star.sdb.Connection
+ @throws
+ <type scope="css::sdbc">SQLException</type> if no connection could be created
+ */
+ void UpdateTableList(
+ const css::uno::Reference< css::sdbc::XConnection >& _rxConnection
+ );
+
+ /** fill the table list with the tables and views determined by the two given containers.
+ The views sequence is used to determine which table is of type view.
+ @param _rxConnection the connection where you got the object names from. Must not be NULL.
+ Used to split the full qualified names into its parts.
+ @param _rTables table/view sequence
+ @param _rViews view sequence
+ */
+ void UpdateTableList(
+ const css::uno::Reference< css::sdbc::XConnection >& _rxConnection,
+ const css::uno::Sequence< OUString>& _rTables,
+ const css::uno::Sequence< OUString>& _rViews
+ );
+
+ /** returns a NamedDatabaseObject record which describes the given entry
+ */
+ css::sdb::application::NamedDatabaseObject
+ describeObject( SvTreeListEntry* _pEntry );
+
+ /** to be used if a foreign instance added a table
+ */
+ SvTreeListEntry* addedTable( const OUString& _rName );
+
+ /** to be used if a foreign instance removed a table
+ */
+ void removedTable( const OUString& _rName );
+
+ /** returns the fully qualified name of a table entry
+ @param _pEntry
+ the entry whose name is to be obtained. Must not denote a folder entry.
+ */
+ OUString getQualifiedTableName( SvTreeListEntry* _pEntry ) const;
+
+ SvTreeListEntry* getEntryByQualifiedName( const OUString& _rName );
+
+ std::unique_ptr<weld::TreeIter> getAllObjectsEntry() const;
+
+ /** does a wildcard check of the given entry
+ <p>There are two different 'checked' states: If the user checks all children of an entry, this is different
+ from checking the entry itself. The second is called 'wildcard' checking, 'cause in the resulting
+ table filter it's represented by a wildcard.</p>
+ */
+ void checkWildcard(weld::TreeIter& rEntry);
+
+ /** determine if the given entry is 'wildcard checked'
+ @see checkWildcard
+ */
+ bool isWildcardChecked(weld::TreeIter& rEntry);
+
+ std::unique_ptr<weld::TreeIter> GetEntryPosByName(const OUString& aName, weld::TreeIter* pStart = nullptr, const IEntryFilter* _pFilter = nullptr) const;
+
+ void CheckButtons(); // make the button states consistent (bottom-up)
+
+ void checkedButton_noBroadcast(weld::TreeIter& rEntry);
+private:
+ TriState implDetermineState(weld::TreeIter& rEntry);
+
+ void implEmphasize(weld::TreeIter& rEntry, bool _bChecked, bool _bUpdateDescendants = true, bool _bUpdateAncestors = true);
+
+ /** adds the given entry to our list
+ @precond
+ our image provider must already have been reset to the connection to which the meta data
+ belong.
+ */
+ void implAddEntry(
+ const css::uno::Reference< css::sdbc::XDatabaseMetaData >& _rxMeta,
+ const OUString& _rTableName,
+ bool _bCheckName = true
+ );
+
+ void implOnNewConnection( const css::uno::Reference< css::sdbc::XConnection >& _rxConnection );
+
+ bool haveVirtualRoot() const { return m_bVirtualRoot; }
+
+ /** fill the table list with the tables and views determined by the two given containers
+ @param _rxConnection the connection where you got the object names from. Must not be NULL.
+ Used to split the full qualified names into its parts.
+ @param _rTables table/view sequence, the second argument is <TRUE/> if it is a table, otherwise it is a view.
+ */
+ void UpdateTableList(
+ const css::uno::Reference< css::sdbc::XConnection >& _rxConnection,
+ const TNames& _rTables
+ );
+};
+
} // namespace dbaui
#endif // INCLUDED_DBACCESS_SOURCE_UI_INC_TABLETREE_HXX
diff --git a/dbaccess/source/ui/misc/imageprovider.cxx b/dbaccess/source/ui/misc/imageprovider.cxx
index a17795afc449..426f99252537 100644
--- a/dbaccess/source/ui/misc/imageprovider.cxx
+++ b/dbaccess/source/ui/misc/imageprovider.cxx
@@ -21,7 +21,6 @@
#include <stringconstants.hxx>
#include <bitmaps.hlst>
-#include <com/sun/star/graphic/XGraphic.hpp>
#include <com/sun/star/graphic/GraphicColorMode.hpp>
#include <com/sun/star/sdb/application/XTableUIProvider.hpp>
#include <com/sun/star/sdbcx/XViewsSupplier.hpp>
@@ -144,6 +143,33 @@ namespace dbaui
}
}
+ OUString ImageProvider::getImageId(const OUString& _rName, const sal_Int32 _nDatabaseObjectType)
+ {
+ if (_nDatabaseObjectType != DatabaseObject::TABLE)
+ {
+ // for types other than tables, the icon does not depend on the concrete object
+ return getDefaultImageResourceID( _nDatabaseObjectType );
+ }
+ else
+ {
+ // no -> determine by type
+ OUString sImageResourceID;
+ lcl_getTableImageResourceID_nothrow( *m_pData, _rName, sImageResourceID );
+ return sImageResourceID;
+ }
+ }
+
+ Reference<XGraphic> ImageProvider::getXGraphic(const OUString& _rName, const sal_Int32 _nDatabaseObjectType)
+ {
+ Reference<XGraphic> xGraphic;
+ if (_nDatabaseObjectType == DatabaseObject::TABLE)
+ {
+ // check whether the connection can give us an icon
+ lcl_getConnectionProvidedTableIcon_nothrow( *m_pData, _rName, xGraphic );
+ }
+ return xGraphic;
+ }
+
Image ImageProvider::getDefaultImage( sal_Int32 _nDatabaseObjectType )
{
Image aObjectImage;
@@ -205,6 +231,31 @@ namespace dbaui
return aFolderImage;
}
+ OUString ImageProvider::getFolderImageId( sal_Int32 _nDatabaseObjectType )
+ {
+ OUString sImageResourceID;
+ switch ( _nDatabaseObjectType )
+ {
+ case DatabaseObject::QUERY:
+ sImageResourceID = QUERYFOLDER_TREE_ICON;
+ break;
+ case DatabaseObject::FORM:
+ sImageResourceID = FORMFOLDER_TREE_ICON;
+ break;
+ case DatabaseObject::REPORT:
+ sImageResourceID = REPORTFOLDER_TREE_ICON;
+ break;
+ case DatabaseObject::TABLE:
+ sImageResourceID = TABLEFOLDER_TREE_ICON;
+ break;
+ default:
+ OSL_FAIL( "ImageProvider::getDefaultImage: invalid database object type!" );
+ break;
+ }
+
+ return sImageResourceID;
+ }
+
Image ImageProvider::getDatabaseImage()
{
return Image(StockImage::Yes, DATABASE_TREE_ICON);
diff --git a/dbaccess/uiconfig/ui/tablesfilterpage.ui b/dbaccess/uiconfig/ui/tablesfilterpage.ui
index c568e2101bdf..682f215cbaf9 100644
--- a/dbaccess/uiconfig/ui/tablesfilterpage.ui
+++ b/dbaccess/uiconfig/ui/tablesfilterpage.ui
@@ -1,8 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.16.0 on Tue Jan 21 15:00:47 2014 -->
+<!-- Generated with glade 3.22.1 -->
<interface domain="dba">
<requires lib="gtk+" version="3.18"/>
- <requires lib="LibreOffice" version="1.0"/>
+ <object class="GtkTreeStore" id="liststore2">
+ <columns>
+ <!-- column-name check1 -->
+ <column type="gboolean"/>
+ <!-- column-name expander -->
+ <column type="GdkPixbuf"/>
+ <!-- column-name text -->
+ <column type="gchararray"/>
+ <!-- column-name id -->
+ <column type="gchararray"/>
+ <!-- column-name checkvis1 -->
+ <column type="gboolean"/>
+ <!-- column-name checktri1 -->
+ <column type="gboolean"/>
+ <!-- column-name weight1 -->
+ <column type="gint"/>
+ </columns>
+ </object>
<object class="GtkFrame" id="TablesFilterPage">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -30,33 +47,71 @@
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="xalign">0</property>
<property name="label" translatable="yes" context="tablesfilterpage|label2">Mark the tables that should be visible for the applications.</property>
<property name="wrap">True</property>
<property name="max_width_chars">56</property>
+ <property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
</packing>
</child>
<child>
- <object class="dbulo-OTableTreeListBox" id="treeview: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="treeview-selection1"/>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkTreeView" id="treeview">
+ <property name="width_request">-1</property>
+ <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">liststore2</property>
+ <property name="headers_visible">False</property>
+ <property name="search_column">1</property>
+ <property name="enable_tree_lines">True</property>
+ <property name="show_expanders">True</property>
+ <child internal-child="selection">
+ <object class="GtkTreeSelection" id="Macro Library List-selection2"/>
+ </child>
+ <child>
+ <object class="GtkTreeViewColumn" id="treeviewcolumn8">
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkCellRendererToggle" id="cellrenderer5"/>
+ <attributes>
+ <attribute name="visible">4</attribute>
+ <attribute name="active">0</attribute>
+ <attribute name="inconsistent">5</attribute>
+ </attributes>
+ </child>
+ <child>
+ <object class="GtkCellRendererPixbuf" id="cellrenderertext5"/>
+ <attributes>
+ <attribute name="pixbuf">1</attribute>
+ </attributes>
+ </child>
+ <child>
+ <object class="GtkCellRendererText" id="cellrenderertext6"/>
+ <attributes>
+ <attribute name="text">2</attribute>
+ <attribute name="weight">5</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ </object>
</child>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
</packing>
</child>
</object>
diff --git a/desktop/source/deployment/gui/dp_gui_updatedialog.cxx b/desktop/source/deployment/gui/dp_gui_updatedialog.cxx
index c4b3cebb3fe0..22a4145e7480 100644
--- a/desktop/source/deployment/gui/dp_gui_updatedialog.cxx
+++ b/desktop/source/deployment/gui/dp_gui_updatedialog.cxx
@@ -549,7 +549,7 @@ IMPL_LINK(UpdateDialog, entryToggled, const row_col&, rRowCol, void)
// error's can't be enabled
const UpdateDialog::Index* p = reinterpret_cast<UpdateDialog::Index const *>(m_xUpdates->get_id(rRowCol.first).toInt64());
if (p->m_eKind == SPECIFIC_ERROR)
- m_xUpdates->set_toggle(nRow, false, 0);
+ m_xUpdates->set_toggle(nRow, TRISTATE_FALSE, 0);
enableOk();
}
@@ -558,7 +558,7 @@ sal_uInt16 UpdateDialog::insertItem(UpdateDialog::Index *pEntry, bool bEnabledCh
{
int nEntry = m_xUpdates->n_children();
m_xUpdates->append();
- m_xUpdates->set_toggle(nEntry, bEnabledCheckBox, 0);
+ m_xUpdates->set_toggle(nEntry, bEnabledCheckBox ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
m_xUpdates->set_text(nEntry, pEntry->m_aName, 1);
m_xUpdates->set_id(nEntry, OUString::number(reinterpret_cast<sal_Int64>(pEntry)));
@@ -654,7 +654,7 @@ void UpdateDialog::enableOk() {
if (!m_xChecking->get_visible()) {
int nChecked = 0;
for (int i = 0, nCount = m_xUpdates->n_children(); i < nCount; ++i) {
- if (m_xUpdates->get_toggle(i, 0))
+ if (m_xUpdates->get_toggle(i, 0) == TRISTATE_TRUE)
++nChecked;
}
m_xOk->set_sensitive(nChecked != 0);
@@ -1057,7 +1057,7 @@ IMPL_LINK_NOARG(UpdateDialog, okHandler, weld::Button&, void)
UpdateDialog::Index const * p =
reinterpret_cast< UpdateDialog::Index const * >(
m_xUpdates->get_id(i).toInt64());
- if (p->m_eKind == ENABLED_UPDATE && m_xUpdates->get_toggle(i, 0)) {
+ if (p->m_eKind == ENABLED_UPDATE && m_xUpdates->get_toggle(i, 0) == TRISTATE_TRUE) {
m_updateData.push_back( m_enabledUpdates[ p->m_nIndex ] );
}
}
diff --git a/desktop/uiconfig/ui/updatedialog.ui b/desktop/uiconfig/ui/updatedialog.ui
index 683f052965f1..820871d98032 100644
--- a/desktop/uiconfig/ui/updatedialog.ui
+++ b/desktop/uiconfig/ui/updatedialog.ui
@@ -371,6 +371,8 @@
<column type="gchararray"/>
<!-- column-name checkvis1 -->
<column type="gboolean"/>
+ <!-- column-name checktri1 -->
+ <column type="gboolean"/>
</columns>
</object>
</interface>
diff --git a/include/vcl/svimpbox.hxx b/include/vcl/svimpbox.hxx
index 9753629cc3c3..3c17f781cf7e 100644
--- a/include/vcl/svimpbox.hxx
+++ b/include/vcl/svimpbox.hxx
@@ -89,6 +89,7 @@ class VCL_DLLPUBLIC SvImpLBox
{
friend class ImpLBSelEng;
friend class SvTreeListBox;
+friend class SalInstanceTreeView;
friend class IconView;
private:
SvTreeList* pTree;
diff --git a/include/vcl/svlbitm.hxx b/include/vcl/svlbitm.hxx
index e5c5f6dd840c..16665dd8c73e 100644
--- a/include/vcl/svlbitm.hxx
+++ b/include/vcl/svlbitm.hxx
@@ -104,6 +104,8 @@ public:
class VCL_DLLPUBLIC SvLBoxString : public SvLBoxItem
{
+private:
+ bool mbEmphasized;
protected:
OUString maText;
@@ -117,6 +119,9 @@ public:
SvTreeListEntry* pEntry,
SvViewDataItem* pViewData = nullptr) override;
+ void Emphasize(bool bEmphasize) { mbEmphasized = bEmphasize; }
+ bool IsEmphasized() const { return mbEmphasized; }
+
const OUString& GetText() const
{
return maText;
diff --git a/include/vcl/treelistbox.hxx b/include/vcl/treelistbox.hxx
index b90ee4b9fdb4..c88ada02c74e 100644
--- a/include/vcl/treelistbox.hxx
+++ b/include/vcl/treelistbox.hxx
@@ -270,6 +270,10 @@ private:
VCL_DLLPRIVATE static void RemoveBoxFromDDList_Impl( const SvTreeListBox& rB );
DECL_DLLPRIVATE_LINK( DragFinishHdl_Impl, sal_Int8, void );
+ // after a checkbox entry is inserted, use this to get its width to support
+ // autowidth for the 1st checkbox column
+ VCL_DLLPRIVATE void CheckBoxInserted(SvTreeListEntry* pEntry);
+
protected:
bool CheckDragAndDropMode( SvTreeListBox const * pSource, sal_Int8 );
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index a7a195a9d39d..1529abe9a31b 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -522,6 +522,7 @@ private:
public:
TreeIter() {}
+ virtual bool equal(const TreeIter& rOther) const = 0;
virtual ~TreeIter() {}
};
@@ -556,10 +557,9 @@ protected:
void signal_toggled(const std::pair<int, int>& rRowCol) { m_aRadioToggleHdl.Call(rRowCol); }
public:
- virtual void insert(const weld::TreeIter* pParent, int pos, const OUString* pStr,
- const OUString* pId, const OUString* pIconName,
- VirtualDevice* pImageSurface, const OUString* pExpanderName,
- bool bChildrenOnDemand, TreeIter* pRet)
+ virtual void insert(const TreeIter* pParent, int pos, const OUString* pStr, const OUString* pId,
+ const OUString* pIconName, VirtualDevice* pImageSurface,
+ const OUString* pExpanderName, bool bChildrenOnDemand, TreeIter* pRet)
= 0;
void insert(int nRow, TreeIter* pRet = nullptr)
@@ -590,12 +590,12 @@ public:
{
insert(nullptr, -1, &rStr, &rId, &rImage, nullptr, nullptr, false, nullptr);
}
- void append(const weld::TreeIter* pParent, const OUString& rId, const OUString& rStr,
+ void append(const TreeIter* pParent, const OUString& rId, const OUString& rStr,
const OUString& rImage)
{
insert(pParent, -1, &rStr, &rId, &rImage, nullptr, nullptr, false, nullptr);
}
- void append(const weld::TreeIter* pParent, const OUString& rStr)
+ void append(const TreeIter* pParent, const OUString& rStr)
{
insert(pParent, -1, &rStr, nullptr, nullptr, nullptr, nullptr, false, nullptr);
}
@@ -606,10 +606,14 @@ public:
void connect_changed(const Link<TreeView&, void>& rLink) { m_aChangeHdl = rLink; }
void connect_row_activated(const Link<TreeView&, void>& rLink) { m_aRowActivatedHdl = rLink; }
+
+ // Argument is a pair of row, col describing the node in non-tree mode.
+ // If in tree mode, then retrieve the toggled node with get_cursor
void connect_toggled(const Link<const std::pair<int, int>&, void>& rLink)
{
m_aRadioToggleHdl = rLink;
}
+
void connect_column_clicked(const Link<int, void>& rLink) { m_aColumnClickedHdl = rLink; }
void connect_model_changed(const Link<TreeView&, void>& rLink) { m_aModelChangedHdl = rLink; }
@@ -625,8 +629,8 @@ public:
virtual void set_text(int row, const OUString& rText, int col = -1) = 0;
virtual void set_sensitive(int row, bool bSensitive, int col = -1) = 0;
virtual void set_id(int row, const OUString& rId) = 0;
- virtual void set_toggle(int row, bool bOn, int col) = 0;
- virtual bool get_toggle(int row, int col) const = 0;
+ virtual void set_toggle(int row, TriState eState, int col) = 0;
+ virtual TriState get_toggle(int row, int col) const = 0;
virtual void set_image(int row, const OUString& rImage, int col = -1) = 0;
virtual void set_image(int row, VirtualDevice& rImage, int col = -1) = 0;
virtual void set_image(int row, const css::uno::Reference<css::graphic::XGraphic>& rImage,
@@ -694,7 +698,11 @@ public:
virtual void expand_row(const TreeIter& rIter) = 0;
virtual void collapse_row(const TreeIter& rIter) = 0;
virtual void set_text(const TreeIter& rIter, const OUString& rStr, int col = -1) = 0;
- virtual void set_image(const weld::TreeIter& rIter, const OUString& rImage, int col = -1) = 0;
+ virtual void set_image(const TreeIter& rIter, const OUString& rImage, int col = -1) = 0;
+ virtual void set_text_emphasis(const TreeIter& rIter, bool bOn, int col) = 0;
+ virtual bool get_text_emphasis(const TreeIter& rIter, int col) const = 0;
+ virtual void set_toggle(const TreeIter& rIter, TriState bOn, int col) = 0;
+ virtual TriState get_toggle(const TreeIter& rIter, int col) const = 0;
virtual OUString get_text(const TreeIter& rIter, int col = -1) const = 0;
virtual void set_id(const TreeIter& rIter, const OUString& rId) = 0;
virtual OUString get_id(const TreeIter& rIter) const = 0;
@@ -704,8 +712,7 @@ public:
virtual void scroll_to_row(const TreeIter& rIter) = 0;
virtual bool is_selected(const TreeIter& rIter) const = 0;
- virtual void move_subtree(weld::TreeIter& rNode, const weld::TreeIter* pNewParent,
- int nIndexInNewParent)
+ virtual void move_subtree(TreeIter& rNode, const TreeIter* pNewParent, int nIndexInNewParent)
= 0;
//calling func on each selected element until func returns true or we run out of elements
diff --git a/sc/source/ui/dbgui/dpgroupdlg.cxx b/sc/source/ui/dbgui/dpgroupdlg.cxx
index 273a0d956564..1edace5962c3 100644
--- a/sc/source/ui/dbgui/dpgroupdlg.cxx
+++ b/sc/source/ui/dbgui/dpgroupdlg.cxx
@@ -225,7 +225,7 @@ ScDPDateGroupDlg::ScDPDateGroupDlg(weld::Window* pParent,
for (size_t nIdx = 0; nIdx < SAL_N_ELEMENTS(aDatePartResIds); ++nIdx)
{
mxLbUnits->append();
- mxLbUnits->set_toggle(nIdx, (nDatePart & spnDateParts[ nIdx ]) != 0, 0);
+ mxLbUnits->set_toggle(nIdx, (nDatePart & spnDateParts[ nIdx ]) ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
mxLbUnits->set_text(nIdx, ScResId(aDatePartResIds[nIdx]), 1);
}
@@ -296,7 +296,7 @@ sal_Int32 ScDPDateGroupDlg::GetDatePart() const
// return listbox contents for "units" mode
sal_Int32 nDatePart = 0;
for (int nIdx = 0, nCount = mxLbUnits->n_children(); nIdx < nCount; ++nIdx )
- if (mxLbUnits->get_toggle(nIdx, 0))
+ if (mxLbUnits->get_toggle(nIdx, 0) == TRISTATE_TRUE)
nDatePart |= spnDateParts[ nIdx ];
return nDatePart;
}
@@ -328,7 +328,7 @@ namespace
{
for (int i = 0; i < rView.n_children(); ++i)
{
- if (rView.get_toggle(i, 0))
+ if (rView.get_toggle(i, 0) == TRISTATE_TRUE)
return true;
}
return false;
diff --git a/sc/source/ui/dbgui/pvfundlg.cxx b/sc/source/ui/dbgui/pvfundlg.cxx
index ddfb6c004a50..7d93d84c5e5e 100644
--- a/sc/source/ui/dbgui/pvfundlg.cxx
+++ b/sc/source/ui/dbgui/pvfundlg.cxx
@@ -94,7 +94,7 @@ bool lclFillListBox(weld::TreeView& rLBox, const vector<ScDPLabelData::Member>&
{
rLBox.append();
int pos = rLBox.n_children() - 1;
- rLBox.set_toggle(pos, false, 0);
+ rLBox.set_toggle(pos, TRISTATE_FALSE, 0);
OUString aName = rMember.getDisplayName();
if (!aName.isEmpty())
rLBox.set_text(pos, aName, 1);
@@ -681,7 +681,7 @@ void ScDPSubtotalOptDlg::FillLabelData( ScDPLabelData& rLabelData ) const
rLabelData.maMembers = maLabelData.maMembers;
int nVisCount = m_xLbHide->n_children();
for (int nPos = 0; nPos < nVisCount; ++nPos)
- rLabelData.maMembers[nPos].mbVisible = !m_xLbHide->get_toggle(nPos, 0);
+ rLabelData.maMembers[nPos].mbVisible = m_xLbHide->get_toggle(nPos, 0) == TRISTATE_FALSE;
// *** HIERARCHY ***
@@ -789,7 +789,7 @@ void ScDPSubtotalOptDlg::InitHideListBox()
lclFillListBox(*m_xLbHide, maLabelData.maMembers);
size_t n = maLabelData.maMembers.size();
for (size_t i = 0; i < n; ++i)
- m_xLbHide->set_toggle(i, !maLabelData.maMembers[i].mbVisible, 0);
+ m_xLbHide->set_toggle(i, maLabelData.maMembers[i].mbVisible ? TRISTATE_FALSE : TRISTATE_TRUE, 0);
bool bEnable = m_xLbHide->n_children() > 0;
m_xHideFrame->set_sensitive(bEnable);
}
diff --git a/sc/source/ui/dbgui/tpsubt.cxx b/sc/source/ui/dbgui/tpsubt.cxx
index cecfad8d77fe..8517e28885e2 100644
--- a/sc/source/ui/dbgui/tpsubt.cxx
+++ b/sc/source/ui/dbgui/tpsubt.cxx
@@ -101,7 +101,7 @@ bool ScTpSubTotalGroup::DoReset( sal_uInt16 nGroupNo,
// first we have to clear the listboxes...
for (int nLbEntry = 0, nCount = mxLbColumns->n_children(); nLbEntry < nCount; ++nLbEntry)
{
- mxLbColumns->set_toggle(nLbEntry, false, 0);
+ mxLbColumns->set_toggle(nLbEntry, TRISTATE_FALSE, 0);
mxLbColumns->set_id(nLbEntry, "0");
}
mxLbFunctions->select(0);
@@ -124,7 +124,7 @@ bool ScTpSubTotalGroup::DoReset( sal_uInt16 nGroupNo,
{
sal_uInt16 nCheckPos = GetFieldSelPos( pSubTotals[i] );
- mxLbColumns->set_toggle(nCheckPos, true, 0);
+ mxLbColumns->set_toggle(nCheckPos, TRISTATE_TRUE, 0);
mxLbColumns->set_id(nCheckPos, OUString::number(FuncToLbPos(pFunctions[i])));
if (i == 0 || nCheckPos < nFirstChecked)
@@ -150,7 +150,7 @@ namespace
int nRet = 0;
for (sal_Int32 i=0, nEntryCount = rTreeView.n_children(); i < nEntryCount; ++i)
{
- if (rTreeView.get_toggle(i, 0))
+ if (rTreeView.get_toggle(i, 0) == TRISTATE_TRUE)
++nRet;
}
return nRet;
@@ -210,7 +210,7 @@ bool ScTpSubTotalGroup::DoFillItemSet( sal_uInt16 nGroupNo,
for ( sal_Int32 i=0, nCheck=0; i<nEntryCount; i++ )
{
- if (mxLbColumns->get_toggle(i, 0))
+ if (mxLbColumns->get_toggle(i, 0) == TRISTATE_TRUE)
{
OSL_ENSURE( nCheck <= nCheckCount,
"Range error :-(" );
@@ -260,7 +260,7 @@ void ScTpSubTotalGroup::FillListBoxes()
nFieldArr[i] = col;
mxLbGroup->insert_text(i+1, aFieldName);
mxLbColumns->insert(i);
- mxLbColumns->set_toggle(i, false, 0);
+ mxLbColumns->set_toggle(i, TRISTATE_FALSE, 0);
mxLbColumns->set_text(i, aFieldName, 1);
mxLbColumns->set_id(i, "0");
i++;
@@ -358,7 +358,7 @@ void ScTpSubTotalGroup::SelectHdl(const weld::Widget *pLb)
else if ( pLb == mxLbFunctions.get() )
{
mxLbColumns->set_id(nColumn, OUString::number(nFunction));
- mxLbColumns->set_toggle(nColumn, true, 0);
+ mxLbColumns->set_toggle(nColumn, TRISTATE_TRUE, 0);
}
}
}
diff --git a/sc/source/ui/miscdlgs/protectiondlg.cxx b/sc/source/ui/miscdlgs/protectiondlg.cxx
index 3dc47081562c..909e205631b8 100644
--- a/sc/source/ui/miscdlgs/protectiondlg.cxx
+++ b/sc/source/ui/miscdlgs/protectiondlg.cxx
@@ -73,7 +73,7 @@ ScTableProtectionDlg::~ScTableProtectionDlg()
void ScTableProtectionDlg::SetDialogData(const ScTableProtection& rData)
{
for (size_t i = 0; i < aOptions.size(); ++i)
- m_xOptionsListBox->set_toggle(i, rData.isOptionEnabled(aOptions[i]), 0);
+ m_xOptionsListBox->set_toggle(i, rData.isOptionEnabled(aOptions[i]) ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
}
void ScTableProtectionDlg::WriteData(ScTableProtection& rData) const
@@ -84,14 +84,14 @@ void ScTableProtectionDlg::WriteData(ScTableProtection& rData) const
rData.setPassword(m_xPassword1Edit->get_text());
for (size_t i = 0; i < aOptions.size(); ++i)
- rData.setOption(aOptions[i], m_xOptionsListBox->get_toggle(i, 0));
+ rData.setOption(aOptions[i], m_xOptionsListBox->get_toggle(i, 0) == TRISTATE_TRUE);
}
void ScTableProtectionDlg::InsertEntry(const OUString& rTxt)
{
m_xOptionsListBox->append();
const int nRow = m_xOptionsListBox->n_children() - 1;
- m_xOptionsListBox->set_toggle(nRow, false, 0);
+ m_xOptionsListBox->set_toggle(nRow, TRISTATE_FALSE, 0);
m_xOptionsListBox->set_text(nRow, rTxt, 1);
}
@@ -115,8 +115,8 @@ void ScTableProtectionDlg::Init()
InsertEntry(m_aDeleteColumns);
InsertEntry(m_aDeleteRows);
- m_xOptionsListBox->set_toggle(0, true, 0);
- m_xOptionsListBox->set_toggle(1, true, 0);
+ m_xOptionsListBox->set_toggle(0, TRISTATE_TRUE, 0);
+ m_xOptionsListBox->set_toggle(1, TRISTATE_TRUE, 0);
m_xOptionsListBox->thaw();
diff --git a/sc/source/ui/miscdlgs/solveroptions.cxx b/sc/source/ui/miscdlgs/solveroptions.cxx
index 072595f023a9..26ff15c2e2d2 100644
--- a/sc/source/ui/miscdlgs/solveroptions.cxx
+++ b/sc/source/ui/miscdlgs/solveroptions.cxx
@@ -128,7 +128,7 @@ const uno::Sequence<beans::PropertyValue>& ScSolverOptionsDialog::GetProperties(
rValue <<= pStringItem->GetIntValue();
}
else
- rValue <<= m_xLbSettings->get_toggle(nEntryPos, 0);
+ rValue <<= m_xLbSettings->get_toggle(nEntryPos, 0) == TRISTATE_TRUE;
}
}
else
@@ -184,7 +184,7 @@ void ScSolverOptionsDialog::FillListBox()
if ( eClass == uno::TypeClass_BOOLEAN )
{
// check box entry
- m_xLbSettings->set_toggle(nPos, ScUnoHelpFunctions::GetBoolFromAny(aValue), 0);
+ m_xLbSettings->set_toggle(nPos, ScUnoHelpFunctions::GetBoolFromAny(aValue) ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
m_xLbSettings->set_text(nPos, aVisName, 1);
}
else
diff --git a/sc/uiconfig/scalc/ui/datafieldoptionsdialog.ui b/sc/uiconfig/scalc/ui/datafieldoptionsdialog.ui
index 33ffb9b06bee..51ae488105f5 100644
--- a/sc/uiconfig/scalc/ui/datafieldoptionsdialog.ui
+++ b/sc/uiconfig/scalc/ui/datafieldoptionsdialog.ui
@@ -12,6 +12,8 @@
<column type="gchararray"/>
<!-- column-name checkvis1 -->
<column type="gboolean"/>
+ <!-- column-name checktri1 -->
+ <column type="gboolean"/>
</columns>
</object>
<object class="GtkAdjustment" id="adjustment1">
diff --git a/sc/uiconfig/scalc/ui/groupbydate.ui b/sc/uiconfig/scalc/ui/groupbydate.ui
index 4a5db5cce542..351cf8510d8c 100644
--- a/sc/uiconfig/scalc/ui/groupbydate.ui
+++ b/sc/uiconfig/scalc/ui/groupbydate.ui
@@ -17,6 +17,8 @@
<column type="gchararray"/>
<!-- column-name checkvis1 -->
<column type="gboolean"/>
+ <!-- column-name checktri1 -->
+ <column type="gboolean"/>
</columns>
</object>
<object class="GtkDialog" id="PivotTableGroupByDate">
diff --git a/sc/uiconfig/scalc/ui/protectsheetdlg.ui b/sc/uiconfig/scalc/ui/protectsheetdlg.ui
index 85f021b0d4de..aa3e9e27f5e1 100644
--- a/sc/uiconfig/scalc/ui/protectsheetdlg.ui
+++ b/sc/uiconfig/scalc/ui/protectsheetdlg.ui
@@ -12,6 +12,8 @@
<column type="gchararray"/>
<!-- column-name checkvis1 -->
<column type="gboolean"/>
+ <!-- column-name checktri1 -->
+ <column type="gboolean"/>
</columns>
</object>
<object class="GtkDialog" id="ProtectSheetDialog">
diff --git a/sc/uiconfig/scalc/ui/solveroptionsdialog.ui b/sc/uiconfig/scalc/ui/solveroptionsdialog.ui
index 5388ef012fb6..6a7fb3edc86a 100644
--- a/sc/uiconfig/scalc/ui/solveroptionsdialog.ui
+++ b/sc/uiconfig/scalc/ui/solveroptionsdialog.ui
@@ -12,6 +12,8 @@
<column type="gchararray"/>
<!-- column-name checkvis1 -->
<column type="gboolean"/>
+ <!-- column-name checktri1 -->
+ <column type="gboolean"/>
</columns>
</object>
<object class="GtkDialog" id="SolverOptionsDialog">
diff --git a/sc/uiconfig/scalc/ui/subtotalgrppage.ui b/sc/uiconfig/scalc/ui/subtotalgrppage.ui
index 994a7d1061d9..40515be77b10 100644
--- a/sc/uiconfig/scalc/ui/subtotalgrppage.ui
+++ b/sc/uiconfig/scalc/ui/subtotalgrppage.ui
@@ -20,6 +20,8 @@
<column type="gchararray"/>
<!-- column-name checkvis1 -->
<column type="gboolean"/>
+ <!-- column-name checktri1 -->
+ <column type="gboolean"/>
</columns>
</object>
<object class="GtkBox" id="SubTotalGrpPage">
diff --git a/sw/source/ui/config/optload.cxx b/sw/source/ui/config/optload.cxx
index 97833bf3d64b..e219d1d6b665 100644
--- a/sw/source/ui/config/optload.cxx
+++ b/sw/source/ui/config/optload.cxx
@@ -491,6 +491,7 @@ SwCaptionOptPage::SwCaptionOptPage(TabPageParent pParent, const SfxItemSet& rSet
std::vector<int> aWidths;
aWidths.push_back(m_xCheckLB->get_checkbox_column_width());
+ aWidths.push_back(m_xCheckLB->get_checkbox_column_width());
m_xCheckLB->set_column_fixed_widths(aWidths);
SwStyleNameMapper::FillUIName(RES_POOLCOLL_LABEL_ABB, m_sIllustration);
@@ -590,7 +591,7 @@ bool SwCaptionOptPage::FillItemSet( SfxItemSet* )
int nCheckCount = 0;
for (int i = 0, nCount = m_xCheckLB->n_children(); i < nCount; ++i)
{
- if (m_xCheckLB->get_toggle(i, 0))
+ if (m_xCheckLB->get_toggle(i, 0) == TRISTATE_TRUE)
++nCheckCount;
InsCaptionOpt* pData = reinterpret_cast<InsCaptionOpt*>(m_xCheckLB->get_id(i).toInt64());
bRet |= pModOpt->SetCapOption(bHTMLMode, pData);
@@ -618,15 +619,15 @@ void SwCaptionOptPage::Reset( const SfxItemSet* rSet)
// Writer objects
int nPos = 0;
m_xCheckLB->append();
- m_xCheckLB->set_toggle(nPos, false, 0);
+ m_xCheckLB->set_toggle(nPos, TRISTATE_FALSE, 0);
m_xCheckLB->set_text(nPos, m_sSWTable, 1);
SetOptions(nPos++, TABLE_CAP);
m_xCheckLB->append();
- m_xCheckLB->set_toggle(nPos, false, 0);
+ m_xCheckLB->set_toggle(nPos, TRISTATE_FALSE, 0);
m_xCheckLB->set_text(nPos, m_sSWFrame, 1);
SetOptions(nPos++, FRAME_CAP);
m_xCheckLB->append();
- m_xCheckLB->set_toggle(nPos, false, 0);
+ m_xCheckLB->set_toggle(nPos, TRISTATE_FALSE, 0);
m_xCheckLB->set_text(nPos, m_sSWGraphic, 1);
SetOptions(nPos++, GRAPHIC_CAP);
@@ -651,7 +652,7 @@ void SwCaptionOptPage::Reset( const SfxItemSet* rSet)
// don't show product version
sClass = sClass.replaceFirst( sComplete, sWithoutVersion );
m_xCheckLB->append();
- m_xCheckLB->set_toggle(nPos, false, 0);
+ m_xCheckLB->set_toggle(nPos, TRISTATE_FALSE, 0);
m_xCheckLB->set_text(nPos, sClass, 1);
SetOptions( nPos++, OLE_CAP, &rOleId );
}
@@ -671,7 +672,7 @@ void SwCaptionOptPage::SetOptions(const sal_uLong nPos,
{
InsCaptionOpt* pIns = new InsCaptionOpt(*pOpt);
m_xCheckLB->set_id(nPos, OUString::number(reinterpret_cast<sal_Int64>(pIns)));
- m_xCheckLB->set_toggle(nPos, pOpt->UseCaption(), 0);
+ m_xCheckLB->set_toggle(nPos, pOpt->UseCaption() ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
}
else
{
@@ -693,7 +694,7 @@ void SwCaptionOptPage::UpdateEntry(int nSelEntry)
{
if (nSelEntry != -1)
{
- bool bChecked = m_xCheckLB->get_toggle(nSelEntry, 0);
+ bool bChecked = m_xCheckLB->get_toggle(nSelEntry, 0) == TRISTATE_TRUE;
m_xSettingsGroup->set_sensitive(bChecked);
bool bNumSep = bChecked && m_xLbCaptionOrder->get_active() == 1;
@@ -816,7 +817,7 @@ void SwCaptionOptPage::SaveEntry(int nEntry)
InsCaptionOpt* pOpt = reinterpret_cast<InsCaptionOpt*>(m_xCheckLB->get_id(nEntry).toInt64());
- pOpt->UseCaption() = m_xCheckLB->get_toggle(nEntry, 0);
+ pOpt->UseCaption() = m_xCheckLB->get_toggle(nEntry, 0) == TRISTATE_TRUE;
const OUString aName(m_xCategoryBox->get_active_text());
if (aName == m_sNone)
pOpt->SetCategory("");
@@ -881,7 +882,7 @@ IMPL_LINK(SwCaptionOptPage, OrderHdl, weld::ComboBox&, rBox, void)
bool bChecked = false;
if (nSelEntry != -1)
{
- bChecked = m_xCheckLB->get_toggle(nSelEntry, 0);
+ bChecked = m_xCheckLB->get_toggle(nSelEntry, 0) == TRISTATE_TRUE;
}
int nPos = rBox.get_active();
diff --git a/sw/source/ui/index/cnttab.cxx b/sw/source/ui/index/cnttab.cxx
index 6790e9710be6..0208d36cd837 100644
--- a/sw/source/ui/index/cnttab.cxx
+++ b/sw/source/ui/index/cnttab.cxx
@@ -575,7 +575,10 @@ SwAddStylesDlg_Impl::SwAddStylesDlg_Impl(weld::Window* pParent,
OUString sEntry = rStyles.getToken(0, TOX_STYLE_DELIMITER, nPos);
m_xHeaderTree->append_text(sEntry);
for (sal_uInt16 j = 0; j <= MAXLEVEL; ++j)
- m_xHeaderTree->set_toggle(nRow, i == j - 1, j + 1);
+ {
+ TriState eState = i == j - 1 ? TRISTATE_TRUE : TRISTATE_FALSE;
+ m_xHeaderTree->set_toggle(nRow, eState, j + 1);
+ }
++nRow;
} while (nPos>=0);
}
@@ -605,7 +608,10 @@ SwAddStylesDlg_Impl::SwAddStylesDlg_Impl(weld::Window* pParent,
{
m_xHeaderTree->append_text(aName);
for (sal_uInt16 k = 0; k <= MAXLEVEL; ++k)
- m_xHeaderTree->set_toggle(nRow, k == 0, k + 1);
+ {
+ TriState eState = k == 0 ? TRISTATE_TRUE : TRISTATE_FALSE;
+ m_xHeaderTree->set_toggle(nRow, eState, k + 1);
+ }
++nRow;
}
}
@@ -635,7 +641,10 @@ IMPL_LINK(SwAddStylesDlg_Impl, TreeSizeAllocHdl, const Size&, rSize, void)
IMPL_LINK(SwAddStylesDlg_Impl, RadioToggleOnHdl, const row_col&, rRowCol, void)
{
for (sal_uInt16 i = 0; i <= MAXLEVEL; ++i)
- m_xHeaderTree->set_toggle(rRowCol.first, rRowCol.second == i + 1, i + 1);
+ {
+ TriState eState = rRowCol.second == i + 1 ? TRISTATE_TRUE : TRISTATE_FALSE;
+ m_xHeaderTree->set_toggle(rRowCol.first, eState, i + 1);
+ }
}
IMPL_LINK(SwAddStylesDlg_Impl, KeyInput, const KeyEvent&, rKEvt, bool)
@@ -668,7 +677,7 @@ IMPL_LINK_NOARG(SwAddStylesDlg_Impl, OkHdl, weld::Button&, void)
int nToggleColumn = 0;
for (sal_uInt16 j = 0; j <= MAXLEVEL; ++j)
{
- if (m_xHeaderTree->get_toggle(i, j + 1))
+ if (m_xHeaderTree->get_toggle(i, j + 1) == TRISTATE_TRUE)
{
nToggleColumn = j;
break;
@@ -696,7 +705,7 @@ IMPL_LINK(SwAddStylesDlg_Impl, LeftRightHdl, weld::Button&, rBtn, void)
int nToggleColumn = 0;
for (sal_uInt16 j = 0; j <= MAXLEVEL; ++j)
{
- if (m_xHeaderTree->get_toggle(nEntry, j + 1))
+ if (m_xHeaderTree->get_toggle(nEntry, j + 1) == TRISTATE_TRUE)
{
nToggleColumn = j;
break;
@@ -715,7 +724,9 @@ IMPL_LINK(SwAddStylesDlg_Impl, LeftRightHdl, weld::Button&, rBtn, void)
}
for (sal_uInt16 j = 0; j <= MAXLEVEL; ++j)
- m_xHeaderTree->set_toggle(nEntry, j == nToggleColumn, j + 1);
+ {
+ m_xHeaderTree->set_toggle(nEntry, j == nToggleColumn ? TRISTATE_TRUE : TRISTATE_FALSE, j + 1);
+ }
}
}
@@ -788,7 +799,7 @@ SwTOXSelectTabPage::SwTOXSelectTabPage(TabPageParent pParent, const SfxItemSet&
{
OUString sId(OUString::number(static_cast<sal_uInt32>(RES_SRCTYPES[i].second)));
m_xFromObjCLB->append();
- m_xFromObjCLB->set_toggle(i, false, 0);
+ m_xFromObjCLB->set_toggle(i, TRISTATE_FALSE, 0);
m_xFromObjCLB->set_text(i, SwResId(RES_SRCTYPES[i].first), 1);
m_xFromObjCLB->set_id(i, sId);
}
@@ -1006,7 +1017,7 @@ void SwTOXSelectTabPage::ApplyTOXDescription()
for (int nFromObj = 0, nCount = m_xFromObjCLB->n_children(); nFromObj < nCount; ++nFromObj)
{
SwTOOElements nData = static_cast<SwTOOElements>(m_xFromObjCLB->get_id(nFromObj).toInt32());
- m_xFromObjCLB->set_toggle(nFromObj, bool(nData & nOLEData), 0);
+ m_xFromObjCLB->set_toggle(nFromObj, bool(nData & nOLEData) ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
}
}
else if(TOX_AUTHORITIES == aCurType.eType)
@@ -1101,7 +1112,7 @@ void SwTOXSelectTabPage::FillTOXDescription()
SwTOOElements nOLEData = SwTOOElements::NONE;
for (int i = 0, nCount = m_xFromObjCLB->n_children(); i < nCount; ++i)
{
- if (m_xFromObjCLB->get_toggle(i, 0))
+ if (m_xFromObjCLB->get_toggle(i, 0) == TRISTATE_TRUE)
{
SwTOOElements nData = static_cast<SwTOOElements>(m_xFromObjCLB->get_id(i).toInt32());
nOLEData |= nData;
diff --git a/sw/uiconfig/swriter/ui/assignstylesdialog.ui b/sw/uiconfig/swriter/ui/assignstylesdialog.ui
index 6d4a931b6887..6a95455ab2db 100644
--- a/sw/uiconfig/swriter/ui/assignstylesdialog.ui
+++ b/sw/uiconfig/swriter/ui/assignstylesdialog.ui
@@ -62,6 +62,28 @@
<column type="gboolean"/>
<!-- column-name checkvis11 -->
<column type="gboolean"/>
+ <!-- column-name checktri1 -->
+ <column type="gboolean"/>
+ <!-- column-name checktri2 -->
+ <column type="gboolean"/>
+ <!-- column-name checktri3 -->
+ <column type="gboolean"/>
+ <!-- column-name checktri4 -->
+ <column type="gboolean"/>
+ <!-- column-name checktri5 -->
+ <column type="gboolean"/>
+ <!-- column-name checktri6 -->
+ <column type="gboolean"/>
+ <!-- column-name checktri7 -->
+ <column type="gboolean"/>
+ <!-- column-name checktri8 -->
+ <column type="gboolean"/>
+ <!-- column-name checktri9 -->
+ <column type="gboolean"/>
+ <!-- column-name checktri10 -->
+ <column type="gboolean"/>
+ <!-- column-name checktri11 -->
+ <column type="gboolean"/>
</columns>
</object>
<object class="GtkDialog" id="AssignStylesDialog">
diff --git a/sw/uiconfig/swriter/ui/optcaptionpage.ui b/sw/uiconfig/swriter/ui/optcaptionpage.ui
index d56d14d554bd..a133a127c32e 100644
--- a/sw/uiconfig/swriter/ui/optcaptionpage.ui
+++ b/sw/uiconfig/swriter/ui/optcaptionpage.ui
@@ -12,6 +12,8 @@
<column type="gchararray"/>
<!-- column-name checkvis1 -->
<column type="gboolean"/>
+ <!-- column-name checktri1 -->
+ <column type="gboolean"/>
</columns>
</object>
<object class="GtkBox" id="OptCaptionPage">
diff --git a/sw/uiconfig/swriter/ui/tocindexpage.ui b/sw/uiconfig/swriter/ui/tocindexpage.ui
index 4d37bd9f0216..6a9d2e24927f 100644
--- a/sw/uiconfig/swriter/ui/tocindexpage.ui
+++ b/sw/uiconfig/swriter/ui/tocindexpage.ui
@@ -47,6 +47,8 @@
<column type="gchararray"/>
<!-- column-name checkvis1 -->
<column type="gboolean"/>
+ <!-- column-name checktri1 -->
+ <column type="gboolean"/>
</columns>
</object>
<object class="GtkBox" id="TocIndexPage">
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 5b60f02d47d4..361b8d7830a7 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -51,6 +51,7 @@
#include <vcl/ptrstyle.hxx>
#include <vcl/slider.hxx>
#include <vcl/sysdata.hxx>
+#include <vcl/svimpbox.hxx>
#include <vcl/svlbitm.hxx>
#include <vcl/svtabbx.hxx>
#include <vcl/tabctrl.hxx>
@@ -2265,9 +2266,44 @@ struct SalInstanceTreeIter : public weld::TreeIter
: iter(pOrig ? pOrig->iter : nullptr)
{
}
+ virtual bool equal(const TreeIter& rOther) const override
+ {
+ return iter == static_cast<const SalInstanceTreeIter&>(rOther).iter;
+ }
SvTreeListEntry* iter;
};
+namespace
+{
+ TriState get_toggle(SvTreeListEntry* pEntry, int col)
+ {
+ ++col; //skip dummy/expander column
+
+ if (static_cast<size_t>(col) == pEntry->ItemCount())
+ return TRISTATE_FALSE;
+
+ assert(col >= 0 && static_cast<size_t>(col) < pEntry->ItemCount());
+ SvLBoxItem& rItem = pEntry->GetItem(col);
+ assert(dynamic_cast<SvLBoxButton*>(&rItem));
+ SvLBoxButton& rToggle = static_cast<SvLBoxButton&>(rItem);
+ if (rToggle.IsStateTristate())
+ return TRISTATE_INDET;
+ else if (rToggle.IsStateChecked())
+ return TRISTATE_TRUE;
+ return TRISTATE_FALSE;
+ }
+
+ bool get_text_emphasis(SvTreeListEntry* pEntry, int col)
+ {
+ ++col; //skip dummy/expander column
+
+ assert(col >= 0 && static_cast<size_t>(col) < pEntry->ItemCount());
+ SvLBoxItem& rItem = pEntry->GetItem(col);
+ assert(dynamic_cast<SvLBoxString*>(&rItem));
+ return static_cast<SvLBoxString&>(rItem).IsEmphasized();
+ }
+}
+
class SalInstanceTreeView : public SalInstanceContainer, public virtual weld::TreeView
{
private:
@@ -2276,6 +2312,7 @@ private:
VclPtr<SvTabListBox> m_xTreeView;
SvLBoxButtonData m_aCheckButtonData;
SvLBoxButtonData m_aRadioButtonData;
+ bool m_bDisableCheckBoxAutoWidth;
int m_nSortColumn;
DECL_LINK(SelectHdl, SvTreeListBox*, void);
@@ -2294,6 +2331,7 @@ public:
, m_xTreeView(pTreeView)
, m_aCheckButtonData(pTreeView, false)
, m_aRadioButtonData(pTreeView, true)
+ , m_bDisableCheckBoxAutoWidth(false)
, m_nSortColumn(-1)
{
m_xTreeView->SetNodeDefaultImages();
@@ -2338,6 +2376,7 @@ public:
virtual void set_column_fixed_widths(const std::vector<int>& rWidths) override
{
+ m_bDisableCheckBoxAutoWidth = true;
std::vector<long> aTabPositions;
aTabPositions.push_back(0);
for (size_t i = 0; i < rWidths.size(); ++i)
@@ -2670,25 +2709,20 @@ public:
set_sensitive(pEntry, bSensitive, col);
}
- virtual bool get_toggle(int pos, int col) const override
+ virtual TriState get_toggle(int pos, int col) const override
{
SvTreeListEntry* pEntry = m_xTreeView->GetEntry(nullptr, pos);
-
- ++col; //skip dummy/expander column
-
- if (static_cast<size_t>(col) == pEntry->ItemCount())
- return false;
-
- assert(col >= 0 && static_cast<size_t>(col) < pEntry->ItemCount());
- SvLBoxItem& rItem = pEntry->GetItem(col);
- assert(dynamic_cast<SvLBoxButton*>(&rItem));
- return static_cast<SvLBoxButton&>(rItem).IsStateChecked();
+ return ::get_toggle(pEntry, col);
}
- virtual void set_toggle(int pos, bool bOn, int col) override
+ virtual TriState get_toggle(const weld::TreeIter& rIter, int col) const override
{
- SvTreeListEntry* pEntry = m_xTreeView->GetEntry(nullptr, pos);
+ const SalInstanceTreeIter& rVclIter = static_cast<const SalInstanceTreeIter&>(rIter);
+ return ::get_toggle(rVclIter.iter, col);
+ }
+ void set_toggle(SvTreeListEntry* pEntry, TriState eState, int col)
+ {
bool bRadio = std::find(m_aRadioIndexes.begin(), m_aRadioIndexes.end(), col) != m_aRadioIndexes.end();
++col; //skip dummy/expander column
@@ -2698,23 +2732,86 @@ public:
if (static_cast<size_t>(col) == pEntry->ItemCount())
{
- pEntry->AddItem(std::make_unique<SvLBoxButton>(SvLBoxButtonKind::EnabledCheckbox,
- bRadio ? &m_aRadioButtonData : &m_aCheckButtonData));
+ SvLBoxButtonData* pData = bRadio ? &m_aRadioButtonData : &m_aCheckButtonData;
+
+ // if we want to have the implicit auto-sizing of the checkbox
+ // column we need to call EnableCheckButton and CheckBoxInserted to
+ // let it figure out that width. But we don't want to override any
+ // explicitly set column width, so disable this if we've set
+ // explicit column widths
+ if (!m_bDisableCheckBoxAutoWidth)
+ {
+ if (!(m_xTreeView->GetTreeFlags() & SvTreeFlags::CHKBTN))
+ {
+ m_xTreeView->EnableCheckButton(pData);
+ // EnableCheckButton clobbered this, restore it
+ pData->SetLink(LINK(this, SalInstanceTreeView, ToggleHdl));
+ }
+ }
+
+ pEntry->AddItem(std::make_unique<SvLBoxButton>(SvLBoxButtonKind::EnabledCheckbox, pData));
SvViewDataEntry* pViewData = m_xTreeView->GetViewDataEntry(pEntry);
m_xTreeView->InitViewData(pViewData, pEntry);
+
+ if (!m_bDisableCheckBoxAutoWidth)
+ m_xTreeView->CheckBoxInserted(pEntry);
}
assert(col >= 0 && static_cast<size_t>(col) < pEntry->ItemCount());
SvLBoxItem& rItem = pEntry->GetItem(col);
assert(dynamic_cast<SvLBoxButton*>(&rItem));
- if (bOn)
- static_cast<SvLBoxButton&>(rItem).SetStateChecked();
- else
- static_cast<SvLBoxButton&>(rItem).SetStateUnchecked();
+ switch (eState)
+ {
+ case TRISTATE_TRUE:
+ static_cast<SvLBoxButton&>(rItem).SetStateChecked();
+ break;
+ case TRISTATE_FALSE:
+ static_cast<SvLBoxButton&>(rItem).SetStateUnchecked();
+ break;
+ case TRISTATE_INDET:
+ static_cast<SvLBoxButton&>(rItem).SetStateTristate();
+ break;
+ }
+
+ m_xTreeView->ModelHasEntryInvalidated(pEntry);
+ }
+
+ virtual void set_toggle(int pos, TriState eState, int col) override
+ {
+ SvTreeListEntry* pEntry = m_xTreeView->GetEntry(nullptr, pos);
+ set_toggle(pEntry, eState, col);
+ }
+
+ virtual void set_toggle(const weld::TreeIter& rIter, TriState eState, int col) override
+ {
+ const SalInstanceTreeIter& rVclIter = static_cast<const SalInstanceTreeIter&>(rIter);
+ set_toggle(rVclIter.iter, eState, col);
+ }
+
+ void set_text_emphasis(SvTreeListEntry* pEntry, bool bOn, int col)
+ {
+ ++col; //skip dummy/expander column
+
+ assert(col >= 0 && static_cast<size_t>(col) < pEntry->ItemCount());
+ SvLBoxItem& rItem = pEntry->GetItem(col);
+ assert(dynamic_cast<SvLBoxString*>(&rItem));
+ static_cast<SvLBoxString&>(rItem).Emphasize(bOn);
m_xTreeView->ModelHasEntryInvalidated(pEntry);
}
+ virtual void set_text_emphasis(const weld::TreeIter& rIter, bool bOn, int col) override
+ {
+ const SalInstanceTreeIter& rVclIter = static_cast<const SalInstanceTreeIter&>(rIter);
+ set_text_emphasis(rVclIter.iter, bOn, col);
+ }
+
+ virtual bool get_text_emphasis(const weld::TreeIter& rIter, int col) const override
+ {
+ const SalInstanceTreeIter& rVclIter = static_cast<const SalInstanceTreeIter&>(rIter);
+ return ::get_text_emphasis(rVclIter.iter, col);
+ }
+
void set_image(SvTreeListEntry* pEntry, const Image& rImage, int col)
{
if (col == -1)
@@ -3244,7 +3341,15 @@ IMPL_LINK(SalInstanceTreeView, ToggleHdl, SvLBoxButtonData*, pData, void)
// tdf#122874 Select the row, calling SelectHdl, before handling
// the toggle
- m_xTreeView->Select(pEntry, true);
+ if (!m_xTreeView->IsSelected(pEntry))
+ {
+ m_xTreeView->SelectAll(false);
+ m_xTreeView->Select(pEntry, true);
+ }
+
+ // toggled signal handlers can query get_cursor to get which
+ // node was clicked
+ m_xTreeView->pImpl->pCursor = pEntry;
for (int i = 1, nCount = pEntry->ItemCount(); i < nCount; ++i)
{
diff --git a/vcl/source/treelist/svlbitm.cxx b/vcl/source/treelist/svlbitm.cxx
index 76d67ff36b49..e7732f687d5b 100644
--- a/vcl/source/treelist/svlbitm.cxx
+++ b/vcl/source/treelist/svlbitm.cxx
@@ -173,11 +173,13 @@ bool SvLBoxButtonData::IsRadio() {
SvLBoxString::SvLBoxString(const OUString& rStr)
- : maText(rStr)
+ : mbEmphasized(false)
+ , maText(rStr)
{
}
SvLBoxString::SvLBoxString()
+ : mbEmphasized(false)
{
}
@@ -203,7 +205,19 @@ void SvLBoxString::Paint(
nStyle |= DrawTextFlags::PathEllipsis | DrawTextFlags::Center;
aSize.setWidth( rDev.GetEntryWidth() );
}
+
+ if (mbEmphasized)
+ {
+ rRenderContext.Push();
+ vcl::Font aFont(rRenderContext.GetFont());
+ aFont.SetWeight(WEIGHT_BOLD);
+ rRenderContext.SetFont(aFont);
+ }
+
rRenderContext.DrawText(tools::Rectangle(rPos, aSize), maText, nStyle);
+
+ if (mbEmphasized)
+ rRenderContext.Pop();
}
std::unique_ptr<SvLBoxItem> SvLBoxString::Clone(SvLBoxItem const * pSource) const
@@ -218,7 +232,19 @@ void SvLBoxString::InitViewData(
{
if( !pViewData )
pViewData = pView->GetViewDataItem( pEntry, this );
+
+ if (mbEmphasized)
+ {
+ pView->Push();
+ vcl::Font aFont( pView->GetFont());
+ aFont.SetWeight(WEIGHT_BOLD);
+ pView->Control::SetFont( aFont );
+ }
+
pViewData->maSize = Size(pView->GetTextWidth(maText), pView->GetTextHeight());
+
+ if (mbEmphasized)
+ pView->Pop();
}
// ***************************************************************
diff --git a/vcl/source/treelist/treelistbox.cxx b/vcl/source/treelist/treelistbox.cxx
index 1a2bb1e9d65f..5bd2a6fb3d0b 100644
--- a/vcl/source/treelist/treelistbox.cxx
+++ b/vcl/source/treelist/treelistbox.cxx
@@ -1679,6 +1679,20 @@ void SvTreeListBox::SetCollapsedEntryBmp(SvTreeListEntry* pEntry,const Image& aB
}
}
+void SvTreeListBox::CheckBoxInserted(SvTreeListEntry* pEntry)
+{
+ SvLBoxButton* pItem = static_cast<SvLBoxButton*>(pEntry->GetFirstItem(SvLBoxItemType::Button));
+ if( pItem )
+ {
+ long nWidth = pItem->GetSize(this, pEntry).Width();
+ if( mnCheckboxItemWidth < nWidth )
+ {
+ mnCheckboxItemWidth = nWidth;
+ nTreeFlags |= SvTreeFlags::RECALCTABS;
+ }
+ }
+}
+
void SvTreeListBox::ImpEntryInserted( SvTreeListEntry* pEntry )
{
@@ -1712,19 +1726,9 @@ void SvTreeListBox::ImpEntryInserted( SvTreeListEntry* pEntry )
if( !(nTreeFlags & SvTreeFlags::CHKBTN) )
return;
- SvLBoxButton* pItem = static_cast<SvLBoxButton*>(pEntry->GetFirstItem(SvLBoxItemType::Button));
- if( pItem )
- {
- long nWidth = pItem->GetSize(this, pEntry).Width();
- if( mnCheckboxItemWidth < nWidth )
- {
- mnCheckboxItemWidth = nWidth;
- nTreeFlags |= SvTreeFlags::RECALCTABS;
- }
- }
+ CheckBoxInserted(pEntry);
}
-
void SvTreeListBox::SetCheckButtonState( SvTreeListEntry* pEntry, SvButtonState eState)
{
if( !(nTreeFlags & SvTreeFlags::CHKBTN) )
@@ -1846,7 +1850,6 @@ void SvTreeListBox::SetDefaultCollapsedEntryBmp( const Image& aBmp )
void SvTreeListBox::EnableCheckButton( SvLBoxButtonData* pData )
{
- DBG_ASSERT(!GetEntryCount(),"EnableCheckButton: Entry count != 0");
if( !pData )
nTreeFlags &= ~SvTreeFlags::CHKBTN;
else
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 853b2827bb07..06a2ba5a705c 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -5634,6 +5634,10 @@ struct GtkInstanceTreeIter : public weld::TreeIter
else
memset(&iter, 0, sizeof(iter));
}
+ virtual bool equal(const TreeIter& rOther) const override
+ {
+ return memcmp(&iter, &static_cast<const GtkInstanceTreeIter&>(rOther).iter, sizeof(GtkTreeIter)) == 0;
+ }
GtkTreeIter iter;
};
@@ -5647,6 +5651,10 @@ private:
std::vector<gulong> m_aColumnSignalIds;
// map from toggle column to toggle visibility column
std::map<int, int> m_aToggleVisMap;
+ // map from toggle column to tristate column
+ std::map<int, int> m_aToggleTriStateMap;
+ // map from text column to text weight column
+ std::map<int, int> m_aWeightMap;
std::vector<GtkSortType> m_aSavedSortTypes;
std::vector<int> m_aSavedSortColumns;
std::vector<int> m_aViewColToModelCol;
@@ -5745,15 +5753,29 @@ private:
return sRet;
}
+ gint get_int(const GtkTreeIter& iter, int col) const
+ {
+ gint nRet(-1);
+ GtkTreeModel *pModel = GTK_TREE_MODEL(m_pTreeStore);
+ gtk_tree_model_get(pModel, const_cast<GtkTreeIter*>(&iter), col, &nRet, -1);
+ return nRet;
+ }
+
+ bool get_bool(const GtkTreeIter& iter, int col) const
+ {
+ gboolean bRet(false);
+ GtkTreeModel *pModel = GTK_TREE_MODEL(m_pTreeStore);
+ gtk_tree_model_get(pModel, const_cast<GtkTreeIter*>(&iter), col, &bRet, -1);
+ return bRet;
+ }
+
bool get_bool(int pos, int col) const
{
gboolean bRet(false);
GtkTreeModel *pModel = GTK_TREE_MODEL(m_pTreeStore);
GtkTreeIter iter;
if (gtk_tree_model_iter_nth_child(pModel, &iter, nullptr, pos))
- {
- gtk_tree_model_get(pModel, &iter, col, &bRet, -1);
- }
+ bRet = get_bool(iter, col);
return bRet;
}
@@ -5768,9 +5790,12 @@ private:
GtkTreeModel *pModel = GTK_TREE_MODEL(m_pTreeStore);
GtkTreeIter iter;
if (gtk_tree_model_iter_nth_child(pModel, &iter, nullptr, pos))
- {
set(iter, col, rText);
- }
+ }
+
+ void set(const GtkTreeIter& iter, int col, bool bOn)
+ {
+ gtk_tree_store_set(m_pTreeStore, const_cast<GtkTreeIter*>(&iter), col, bOn, -1);
}
void set(int pos, int col, bool bOn)
@@ -5778,9 +5803,12 @@ private:
GtkTreeModel *pModel = GTK_TREE_MODEL(m_pTreeStore);
GtkTreeIter iter;
if (gtk_tree_model_iter_nth_child(pModel, &iter, nullptr, pos))
- {
- gtk_tree_store_set(m_pTreeStore, &iter, col, bOn, -1);
- }
+ set(iter, col, bOn);
+ }
+
+ void set(const GtkTreeIter& iter, int col, gint bInt)
+ {
+ gtk_tree_store_set(m_pTreeStore, const_cast<GtkTreeIter*>(&iter), col, bInt, -1);
}
static gboolean signalTestExpandRow(GtkTreeView*, GtkTreeIter* iter, GtkTreePath*, gpointer widget)
@@ -5926,15 +5954,18 @@ public:
for (GList* pRenderer = g_list_first(pRenderers); pRenderer; pRenderer = g_list_next(pRenderer))
{
GtkCellRenderer* pCellRenderer = GTK_CELL_RENDERER(pRenderer->data);
- if (m_nTextCol == -1 && GTK_IS_CELL_RENDERER_TEXT(pCellRenderer))
+ if (GTK_IS_CELL_RENDERER_TEXT(pCellRenderer))
{
- m_nTextCol = nIndex;
+ if (m_nTextCol == -1)
+ m_nTextCol = nIndex;
+ m_aWeightMap[nIndex] = -1;
}
else if (GTK_IS_CELL_RENDERER_TOGGLE(pCellRenderer))
{
g_object_set_data(G_OBJECT(pCellRenderer), "g-lo-CellIndex", reinterpret_cast<gpointer>(nIndex));
g_signal_connect(G_OBJECT(pCellRenderer), "toggled", G_CALLBACK(signalCellToggled), this);
m_aToggleVisMap[nIndex] = -1;
+ m_aToggleTriStateMap[nIndex] = -1;
}
else if (GTK_IS_CELL_RENDERER_PIXBUF(pCellRenderer))
{
@@ -5950,11 +5981,15 @@ public:
g_list_free(pRenderers);
m_aViewColToModelCol.push_back(nIndex - 1);
}
+
m_nIdCol = nIndex++;
+
for (auto& a : m_aToggleVisMap)
- {
a.second = nIndex++;
- }
+ for (auto& a : m_aToggleTriStateMap)
+ a.second = nIndex++;
+ for (auto& a : m_aWeightMap)
+ a.second = nIndex++;
GtkTreeModel *pModel = GTK_TREE_MODEL(m_pTreeStore);
m_nRowDeletedSignalId = g_signal_connect(pModel, "row-deleted", G_CALLBACK(signalRowDeleted), this);
@@ -6337,17 +6372,64 @@ public:
set(pos, col, rText);
}
- virtual bool get_toggle(int pos, int col) const override
+ virtual TriState get_toggle(int pos, int col) const override
{
- return get_bool(pos, get_model_col(col));
+ col = get_model_col(col);
+ if (get_bool(pos, m_aToggleTriStateMap.find(col)->second))
+ return TRISTATE_INDET;
+ return get_bool(pos, col) ? TRISTATE_TRUE : TRISTATE_FALSE;
+ }
+
+ virtual TriState get_toggle(const weld::TreeIter& rIter, int col) const override
+ {
+ col = get_model_col(col);
+ const GtkInstanceTreeIter& rGtkIter = static_cast<const GtkInstanceTreeIter&>(rIter);
+ if (get_bool(rGtkIter.iter, m_aToggleTriStateMap.find(col)->second))
+ return TRISTATE_INDET;
+ return get_bool(rGtkIter.iter, col) ? TRISTATE_TRUE : TRISTATE_FALSE;
}
- virtual void set_toggle(int pos, bool bOn, int col) override
+ virtual void set_toggle(int pos, TriState eState, int col) override
{
col = get_model_col(col);
// checkbuttons are invisible until toggled on or off
set(pos, m_aToggleVisMap[col], true);
- set(pos, col, bOn);
+ if (eState == TRISTATE_INDET)
+ set(pos, m_aToggleTriStateMap[col], true);
+ else
+ {
+ set(pos, m_aToggleTriStateMap[col], false);
+ set(pos, col, eState == TRISTATE_TRUE);
+ }
+ }
+
+ virtual void set_toggle(const weld::TreeIter& rIter, TriState eState, int col) override
+ {
+ const GtkInstanceTreeIter& rGtkIter = static_cast<const GtkInstanceTreeIter&>(rIter);
+ col = get_model_col(col);
+ // checkbuttons are invisible until toggled on or off
+ set(rGtkIter.iter, m_aToggleVisMap[col], true);
+ if (eState == TRISTATE_INDET)
+ set(rGtkIter.iter, m_aToggleTriStateMap[col], true);
+ else
+ {
+ set(rGtkIter.iter, m_aToggleTriStateMap[col], false);
+ set(rGtkIter.iter, col, eState == TRISTATE_TRUE);
+ }
+ }
+
+ virtual void set_text_emphasis(const weld::TreeIter& rIter, bool bOn, int col) override
+ {
+ const GtkInstanceTreeIter& rGtkIter = static_cast<const GtkInstanceTreeIter&>(rIter);
+ col = get_model_col(col);
+ set(rGtkIter.iter, m_aWeightMap[col], bOn ? PANGO_WEIGHT_BOLD : -1);
+ }
+
+ virtual bool get_text_emphasis(const weld::TreeIter& rIter, int col) const override
+ {
+ const GtkInstanceTreeIter& rGtkIter = static_cast<const GtkInstanceTreeIter&>(rIter);
+ col = get_model_col(col);
+ return get_int(rGtkIter.iter, m_aWeightMap.find(col)->second) == PANGO_WEIGHT_BOLD;
}
using GtkInstanceWidget::set_sensitive;
@@ -6360,6 +6442,8 @@ public:
col = get_model_col(col);
col += m_nIdCol + 1; // skip over id column
col += m_aToggleVisMap.size(); // skip over toggle columns
+ col += m_aToggleTriStateMap.size(); // skip over tristate columns
+ col += m_aWeightMap.size(); // skip over weight columns
set(pos, col, bSensitive);
}