2024-11-18 09:33:05 +01:00
|
|
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
|
2024-11-09 00:28:06 +01:00
|
|
|
/*
|
|
|
|
* This file is part of the LibreOffice project.
|
|
|
|
*
|
|
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <QtInstanceTreeView.hxx>
|
|
|
|
#include <QtInstanceTreeView.moc>
|
|
|
|
|
|
|
|
#include <vcl/qt/QtUtils.hxx>
|
|
|
|
|
2024-11-30 00:34:32 +01:00
|
|
|
// role used for the ID in the QStandardItem
|
|
|
|
constexpr int ROLE_ID = Qt::UserRole + 1000;
|
|
|
|
|
2024-11-09 00:28:06 +01:00
|
|
|
QtInstanceTreeView::QtInstanceTreeView(QTreeView* pTreeView)
|
|
|
|
: QtInstanceWidget(pTreeView)
|
|
|
|
, m_pTreeView(pTreeView)
|
|
|
|
{
|
|
|
|
assert(m_pTreeView);
|
|
|
|
|
2024-11-29 15:44:47 +01:00
|
|
|
m_pModel = qobject_cast<QStandardItemModel*>(m_pTreeView->model());
|
|
|
|
assert(m_pModel && "tree view doesn't have expected item model set");
|
2024-11-30 01:36:47 +01:00
|
|
|
|
2024-11-30 01:59:32 +01:00
|
|
|
m_pSelectionModel = m_pTreeView->selectionModel();
|
|
|
|
assert(m_pSelectionModel);
|
2024-11-30 01:51:28 +01:00
|
|
|
|
2024-11-30 01:59:32 +01:00
|
|
|
connect(m_pTreeView, &QTreeView::activated, this, &QtInstanceTreeView::handleActivated);
|
2024-12-05 23:46:35 +01:00
|
|
|
connect(m_pSelectionModel, &QItemSelectionModel::selectionChanged, this,
|
|
|
|
&QtInstanceTreeView::handleSelectionChanged);
|
2024-11-29 15:44:47 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::insert(const weld::TreeIter* pParent, int pos, const OUString* pStr,
|
|
|
|
const OUString* pId, const OUString* pIconName,
|
|
|
|
VirtualDevice* pImageSurface, bool bChildrenOnDemand,
|
|
|
|
weld::TreeIter* pRet)
|
|
|
|
{
|
|
|
|
// Only specific subset of parameters handled so far;
|
|
|
|
// assert only these are used at the moment and implement remaining cases
|
|
|
|
// when needed to support more dialogs, then adjust/remove asserts below
|
|
|
|
assert(!pParent && "Not implemented yet");
|
|
|
|
assert(pos == -1 && "Not implemented yet");
|
|
|
|
assert(!pIconName && "Not implemented yet");
|
|
|
|
assert(!pImageSurface && "Not implemented yet");
|
|
|
|
assert(!bChildrenOnDemand && "Not implemented yet");
|
|
|
|
assert(!pRet && "Not implemented yet");
|
|
|
|
// avoid -Werror=unused-parameter for release build
|
|
|
|
(void)pParent;
|
|
|
|
(void)pos;
|
|
|
|
(void)pIconName;
|
|
|
|
(void)pImageSurface;
|
|
|
|
(void)bChildrenOnDemand;
|
|
|
|
(void)pRet;
|
|
|
|
|
|
|
|
SolarMutexGuard g;
|
|
|
|
GetQtInstance().RunInMainThread([&] {
|
2024-11-30 00:34:32 +01:00
|
|
|
QStandardItem* pItem = new QStandardItem;
|
|
|
|
if (pStr)
|
|
|
|
pItem->setText(toQString(*pStr));
|
|
|
|
if (pId)
|
|
|
|
pItem->setData(toQString(*pId), ROLE_ID);
|
2024-11-29 15:44:47 +01:00
|
|
|
m_pModel->appendRow(pItem);
|
|
|
|
});
|
2024-11-09 00:28:06 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::insert_separator(int, const OUString&)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
OUString QtInstanceTreeView::get_selected_text() const
|
|
|
|
{
|
2024-11-30 01:09:10 +01:00
|
|
|
SolarMutexGuard g;
|
|
|
|
|
|
|
|
OUString sText;
|
|
|
|
GetQtInstance().RunInMainThread([&] {
|
2024-11-30 01:59:32 +01:00
|
|
|
const QModelIndexList aSelectedIndexes = m_pSelectionModel->selectedIndexes();
|
2024-11-30 01:09:10 +01:00
|
|
|
if (aSelectedIndexes.empty())
|
|
|
|
return;
|
|
|
|
|
|
|
|
sText = toOUString(m_pModel->itemFromIndex(aSelectedIndexes.first())->text());
|
|
|
|
});
|
|
|
|
|
|
|
|
return sText;
|
2024-11-09 00:28:06 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
OUString QtInstanceTreeView::get_selected_id() const
|
|
|
|
{
|
2024-11-30 01:09:10 +01:00
|
|
|
SolarMutexGuard g;
|
|
|
|
|
|
|
|
OUString sId;
|
|
|
|
GetQtInstance().RunInMainThread([&] {
|
2024-11-30 01:59:32 +01:00
|
|
|
const QModelIndexList aSelectedIndexes = m_pSelectionModel->selectedIndexes();
|
2024-11-30 01:09:10 +01:00
|
|
|
if (aSelectedIndexes.empty())
|
|
|
|
return;
|
|
|
|
|
|
|
|
QVariant aIdData = aSelectedIndexes.first().data(ROLE_ID);
|
|
|
|
if (aIdData.canConvert<QString>())
|
|
|
|
sId = toOUString(aIdData.toString());
|
|
|
|
});
|
|
|
|
|
|
|
|
return sId;
|
2024-11-09 00:28:06 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::enable_toggle_buttons(weld::ColumnToggleType)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::set_clicks_to_toggle(int) { assert(false && "Not implemented yet"); }
|
|
|
|
|
|
|
|
int QtInstanceTreeView::get_selected_index() const
|
|
|
|
{
|
2024-11-30 02:17:21 +01:00
|
|
|
SolarMutexGuard g;
|
|
|
|
|
|
|
|
int nIndex = -1;
|
|
|
|
GetQtInstance().RunInMainThread([&] {
|
|
|
|
const QModelIndexList aSelectedIndexes = m_pSelectionModel->selectedIndexes();
|
|
|
|
if (aSelectedIndexes.empty())
|
|
|
|
return;
|
|
|
|
|
|
|
|
nIndex = aSelectedIndexes.first().row();
|
|
|
|
});
|
|
|
|
|
|
|
|
return nIndex;
|
2024-11-09 00:28:06 +01:00
|
|
|
}
|
|
|
|
|
2024-11-29 15:44:47 +01:00
|
|
|
void QtInstanceTreeView::select(int nPos)
|
|
|
|
{
|
|
|
|
SolarMutexGuard g;
|
2024-11-30 01:59:32 +01:00
|
|
|
GetQtInstance().RunInMainThread(
|
|
|
|
[&] { m_pSelectionModel->select(m_pModel->index(nPos, 0), QItemSelectionModel::Select); });
|
2024-11-29 15:44:47 +01:00
|
|
|
}
|
2024-11-09 00:28:06 +01:00
|
|
|
|
2024-11-30 02:17:21 +01:00
|
|
|
void QtInstanceTreeView::unselect(int nPos)
|
|
|
|
{
|
|
|
|
SolarMutexGuard g;
|
|
|
|
GetQtInstance().RunInMainThread([&] {
|
|
|
|
m_pSelectionModel->select(m_pModel->index(nPos, 0), QItemSelectionModel::Deselect);
|
|
|
|
});
|
|
|
|
}
|
2024-11-09 00:28:06 +01:00
|
|
|
|
|
|
|
void QtInstanceTreeView::remove(int) { assert(false && "Not implemented yet"); }
|
|
|
|
|
2024-11-29 15:44:47 +01:00
|
|
|
OUString QtInstanceTreeView::get_text(int nRow, int nCol) const
|
2024-11-09 00:28:06 +01:00
|
|
|
{
|
2024-11-29 15:44:47 +01:00
|
|
|
assert(nCol == -1 && "Column support not implemented yet");
|
|
|
|
(void)nCol; // for release build
|
|
|
|
|
|
|
|
SolarMutexGuard g;
|
|
|
|
|
|
|
|
OUString sText;
|
|
|
|
GetQtInstance().RunInMainThread([&] {
|
|
|
|
const QModelIndex aIndex = m_pModel->index(nRow, 0);
|
|
|
|
const QVariant aData = m_pModel->data(aIndex);
|
|
|
|
assert(aData.canConvert<QString>() && "model data not a string");
|
|
|
|
sText = toOUString(aData.toString());
|
|
|
|
});
|
|
|
|
|
|
|
|
return sText;
|
2024-11-09 00:28:06 +01:00
|
|
|
}
|
|
|
|
|
2024-12-07 19:53:28 +01:00
|
|
|
void QtInstanceTreeView::set_text(int nRow, const OUString& rText, int nCol)
|
2024-11-09 00:28:06 +01:00
|
|
|
{
|
2024-12-07 19:53:28 +01:00
|
|
|
assert(nCol != -1 && "Support for special index -1 (first text column) not implemented yet");
|
|
|
|
|
|
|
|
SolarMutexGuard g;
|
|
|
|
GetQtInstance().RunInMainThread([&] {
|
|
|
|
QStandardItem* pItem = m_pModel->item(nRow, nCol);
|
|
|
|
if (!pItem)
|
|
|
|
{
|
|
|
|
pItem = new QStandardItem;
|
|
|
|
m_pModel->setItem(nRow, nCol, pItem);
|
|
|
|
}
|
|
|
|
pItem->setText(toQString(rText));
|
|
|
|
});
|
2024-11-09 00:28:06 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::set_sensitive(int, bool, int) { assert(false && "Not implemented yet"); }
|
|
|
|
|
|
|
|
bool QtInstanceTreeView::get_sensitive(int, int) const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::set_id(int, const OUString&) { assert(false && "Not implemented yet"); }
|
|
|
|
|
|
|
|
void QtInstanceTreeView::set_toggle(int, TriState, int) { assert(false && "Not implemented yet"); }
|
|
|
|
|
|
|
|
TriState QtInstanceTreeView::get_toggle(int, int) const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return TRISTATE_INDET;
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::set_image(int, const OUString&, int)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::set_image(int, VirtualDevice&, int)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::set_image(int, const css::uno::Reference<css::graphic::XGraphic>&, int)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::set_text_emphasis(int, bool, int)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
bool QtInstanceTreeView::get_text_emphasis(int, int) const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::set_text_align(int, double, int)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::swap(int, int) { assert(false && "Not implemented yet"); }
|
|
|
|
|
|
|
|
std::vector<int> QtInstanceTreeView::get_selected_rows() const
|
|
|
|
{
|
2024-11-29 15:44:47 +01:00
|
|
|
SolarMutexGuard g;
|
|
|
|
|
|
|
|
std::vector<int> aSelectedRows;
|
|
|
|
|
|
|
|
GetQtInstance().RunInMainThread([&] {
|
2024-12-07 23:13:25 +01:00
|
|
|
const QModelIndexList aSelectionIndexes = m_pSelectionModel->selectedRows();
|
2024-11-29 15:44:47 +01:00
|
|
|
for (const QModelIndex& aIndex : aSelectionIndexes)
|
|
|
|
aSelectedRows.push_back(aIndex.row());
|
|
|
|
});
|
|
|
|
|
|
|
|
return aSelectedRows;
|
2024-11-09 00:28:06 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::set_font_color(int, const Color&)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::scroll_to_row(int) { assert(false && "Not implemented yet"); }
|
|
|
|
|
|
|
|
bool QtInstanceTreeView::is_selected(int) const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
int QtInstanceTreeView::get_cursor_index() const
|
|
|
|
{
|
2024-12-06 09:59:32 +01:00
|
|
|
SolarMutexGuard g;
|
|
|
|
|
|
|
|
int nIndex = -1;
|
|
|
|
GetQtInstance().RunInMainThread([&] {
|
|
|
|
const QModelIndex aCurrentIndex = m_pSelectionModel->currentIndex();
|
|
|
|
if (aCurrentIndex.isValid())
|
|
|
|
nIndex = aCurrentIndex.row();
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
return nIndex;
|
2024-11-09 00:28:06 +01:00
|
|
|
}
|
|
|
|
|
2024-12-06 09:59:32 +01:00
|
|
|
void QtInstanceTreeView::set_cursor(int nPos)
|
|
|
|
{
|
|
|
|
SolarMutexGuard g;
|
|
|
|
|
|
|
|
GetQtInstance().RunInMainThread([&] {
|
|
|
|
m_pSelectionModel->setCurrentIndex(m_pModel->index(nPos, 0), QItemSelectionModel::NoUpdate);
|
|
|
|
});
|
|
|
|
}
|
2024-11-09 00:28:06 +01:00
|
|
|
|
2024-11-30 00:48:16 +01:00
|
|
|
int QtInstanceTreeView::find_text(const OUString& rText) const
|
2024-11-09 00:28:06 +01:00
|
|
|
{
|
2024-11-30 00:48:16 +01:00
|
|
|
SolarMutexGuard g;
|
|
|
|
|
|
|
|
int nIndex = -1;
|
|
|
|
GetQtInstance().RunInMainThread([&] {
|
|
|
|
const QList<QStandardItem*> aItems = m_pModel->findItems(toQString(rText));
|
|
|
|
if (!aItems.empty())
|
|
|
|
nIndex = aItems.at(0)->index().row();
|
|
|
|
});
|
|
|
|
|
|
|
|
return nIndex;
|
2024-11-09 00:28:06 +01:00
|
|
|
}
|
|
|
|
|
2024-11-30 00:34:32 +01:00
|
|
|
OUString QtInstanceTreeView::get_id(int nPos) const
|
2024-11-09 00:28:06 +01:00
|
|
|
{
|
2024-11-30 00:34:32 +01:00
|
|
|
SolarMutexGuard g;
|
|
|
|
|
|
|
|
OUString sId;
|
|
|
|
GetQtInstance().RunInMainThread([&] {
|
tdf#130857 qt weld: Fix incorrect param order for row/col
In QtInstanceTreeView::get_id, the nPos param is the
row number, but was incorrectly passed as the
second parameter to QStandardItemModel::index [1]
which is for the column. Swap the params to fix that.
Passing incorrectly would trigger a crash in a WIP branch
for Writer's "Tools" -> "XML Filter Settings" dialog when
clicking on the second row, as the ID data is only set
for the item in the first, not the second column,
so `pInfo` in XMLFilterSettingsDialog::updateStates
would be null.
Backtrace:
1 XMLFilterSettingsDialog::updateStates xmlfiltersettingsdialog.cxx 183 0x7f3eb862194e
2 XMLFilterSettingsDialog::SelectionChangedHdl_Impl xmlfiltersettingsdialog.cxx 153 0x7f3eb8621859
3 XMLFilterSettingsDialog::LinkStubSelectionChangedHdl_Impl xmlfiltersettingsdialog.cxx 151 0x7f3eb861e8cd
4 Link<weld::TreeView&, void>::Call link.hxx 111 0x7f3eeb997aa1
5 weld::TreeView::signal_selection_changed weld.hxx 989 0x7f3eeb99733c
6 QtInstanceTreeView::handleSelectionChanged QtInstanceTreeView.cxx 781 0x7f3eeb98cb2d
7 QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceTreeView:: *)()>::call(void (QtInstanceTreeView:: *)(), QtInstanceTreeView *, void * *)::{lambda()#1}::operator()() const qobjectdefs_impl.h 127 0x7f3eeb998141
8 QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceTreeView:: *)()>::call(void (QtInstanceTreeView:: *)(), QtInstanceTreeView *, void * *)::{lambda()#1}>(void * *, QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceTreeView:: *)()>::call(void (QtInstanceTreeView:: *)(), QtInstanceTreeView *, void * *)::{lambda()#1}&&) qobjectdefs_impl.h 65 0x7f3eeb998079
9 QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceTreeView:: *)()>::call(void (QtInstanceTreeView:: *)(), QtInstanceTreeView *, void * *) qobjectdefs_impl.h 126 0x7f3eeb997fab
10 QtPrivate::FunctionPointer<void (QtInstanceTreeView:: *)()>::call<QtPrivate::List<>, void>(void (QtInstanceTreeView:: *)(), QtInstanceTreeView *, void * *) qobjectdefs_impl.h 174 0x7f3eeb997f2d
11 QtPrivate::QCallableObject<void (QtInstanceTreeView:: *)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void * *, bool *) qobjectdefs_impl.h 545 0x7f3eeb997e56
12 QtPrivate::QSlotObjectBase::call qobjectdefs_impl.h 461 0x7f3eeaa5ce22
13 doActivate<false> qobject.cpp 4139 0x7f3eeab1c644
14 QMetaObject::activate qobject.cpp 4199 0x7f3eeab121b3
15 QMetaObject::activate<void, QItemSelection, QItemSelection> qobjectdefs.h 306 0x7f3eeaf93da5
16 QItemSelectionModel::selectionChanged moc_qitemselectionmodel.cpp 390 0x7f3eeaf85b76
17 QItemSelectionModel::emitSelectionChanged qitemselectionmodel.cpp 2029 0x7f3eeaf87a2f
18 QItemSelectionModel::select qitemselectionmodel.cpp 1372 0x7f3eeaf872f9
19 QTreeViewPrivate::select qtreeview.cpp 4016 0x7f3ee906f2ec
20 QTreeView::setSelection qtreeview.cpp 2393 0x7f3ee906eaae
... <More>
Change-Id: Icf6b3004ab95991da69c0ff86201421d620aaa43
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178066
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
2024-12-07 23:02:08 +01:00
|
|
|
QVariant aRoleData = m_pModel->data(m_pModel->index(nPos, 0), ROLE_ID);
|
2024-11-30 00:34:32 +01:00
|
|
|
if (aRoleData.canConvert<QString>())
|
|
|
|
sId = toOUString(aRoleData.toString());
|
|
|
|
});
|
|
|
|
|
|
|
|
return sId;
|
2024-11-09 00:28:06 +01:00
|
|
|
}
|
|
|
|
|
2024-11-30 00:48:16 +01:00
|
|
|
int QtInstanceTreeView::find_id(const OUString& rId) const
|
2024-11-09 00:28:06 +01:00
|
|
|
{
|
2024-11-30 00:48:16 +01:00
|
|
|
SolarMutexGuard g;
|
|
|
|
|
|
|
|
int nIndex = -1;
|
|
|
|
GetQtInstance().RunInMainThread([&] {
|
|
|
|
for (int i = 0; i < m_pModel->rowCount(); i++)
|
|
|
|
{
|
|
|
|
if (get_id(i) == rId)
|
|
|
|
{
|
|
|
|
nIndex = i;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
return nIndex;
|
2024-11-09 00:28:06 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
std::unique_ptr<weld::TreeIter> QtInstanceTreeView::make_iterator(const weld::TreeIter*) const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::copy_iterator(const weld::TreeIter&, weld::TreeIter&) const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
bool QtInstanceTreeView::get_selected(weld::TreeIter*) const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool QtInstanceTreeView::get_cursor(weld::TreeIter*) const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::set_cursor(const weld::TreeIter&)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
bool QtInstanceTreeView::get_iter_first(weld::TreeIter&) const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool QtInstanceTreeView::iter_next_sibling(weld::TreeIter&) const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool QtInstanceTreeView::iter_previous_sibling(weld::TreeIter&) const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool QtInstanceTreeView::iter_next(weld::TreeIter&) const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool QtInstanceTreeView::iter_previous(weld::TreeIter&) const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool QtInstanceTreeView::iter_children(weld::TreeIter&) const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool QtInstanceTreeView::iter_parent(weld::TreeIter&) const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
int QtInstanceTreeView::get_iter_depth(const weld::TreeIter&) const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
int QtInstanceTreeView::get_iter_index_in_parent(const weld::TreeIter&) const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
int QtInstanceTreeView::iter_compare(const weld::TreeIter&, const weld::TreeIter&) const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool QtInstanceTreeView::iter_has_child(const weld::TreeIter&) const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
int QtInstanceTreeView::iter_n_children(const weld::TreeIter&) const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::remove(const weld::TreeIter&) { assert(false && "Not implemented yet"); }
|
|
|
|
|
|
|
|
void QtInstanceTreeView::select(const weld::TreeIter&) { assert(false && "Not implemented yet"); }
|
|
|
|
|
|
|
|
void QtInstanceTreeView::unselect(const weld::TreeIter&) { assert(false && "Not implemented yet"); }
|
|
|
|
|
|
|
|
void QtInstanceTreeView::set_extra_row_indent(const weld::TreeIter&, int)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::set_text(const weld::TreeIter&, const OUString&, int)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::set_sensitive(const weld::TreeIter&, bool, int)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
bool QtInstanceTreeView::get_sensitive(const weld::TreeIter&, int) const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::set_text_emphasis(const weld::TreeIter&, bool, int)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
bool QtInstanceTreeView::get_text_emphasis(const weld::TreeIter&, int) const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::set_text_align(const weld::TreeIter&, double, int)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::set_toggle(const weld::TreeIter&, TriState, int)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
TriState QtInstanceTreeView::get_toggle(const weld::TreeIter&, int) const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return TRISTATE_INDET;
|
|
|
|
}
|
|
|
|
|
|
|
|
OUString QtInstanceTreeView::get_text(const weld::TreeIter&, int) const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return OUString();
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::set_id(const weld::TreeIter&, const OUString&)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
OUString QtInstanceTreeView::get_id(const weld::TreeIter&) const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return OUString();
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::set_image(const weld::TreeIter&, const OUString&, int)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::set_image(const weld::TreeIter&, VirtualDevice&, int)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::set_image(const weld::TreeIter&,
|
|
|
|
const css::uno::Reference<css::graphic::XGraphic>&, int)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::set_font_color(const weld::TreeIter&, const Color&)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::scroll_to_row(const weld::TreeIter&)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
bool QtInstanceTreeView::is_selected(const weld::TreeIter&) const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::move_subtree(weld::TreeIter&, const weld::TreeIter*, int)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::all_foreach(const std::function<bool(weld::TreeIter&)>&)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::selected_foreach(const std::function<bool(weld::TreeIter&)>&)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::visible_foreach(const std::function<bool(weld::TreeIter&)>&)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::bulk_insert_for_each(
|
|
|
|
int, const std::function<void(weld::TreeIter&, int nSourceIndex)>&, const weld::TreeIter*,
|
|
|
|
const std::vector<int>*, bool)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
bool QtInstanceTreeView::get_row_expanded(const weld::TreeIter&) const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::expand_row(const weld::TreeIter&)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::collapse_row(const weld::TreeIter&)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::set_children_on_demand(const weld::TreeIter&, bool)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
bool QtInstanceTreeView::get_children_on_demand(const weld::TreeIter&) const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::set_show_expanders(bool) { assert(false && "Not implemented yet"); }
|
|
|
|
|
|
|
|
void QtInstanceTreeView::start_editing(const weld::TreeIter&)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::end_editing() { assert(false && "Not implemented yet"); }
|
|
|
|
|
|
|
|
void QtInstanceTreeView::enable_drag_source(rtl::Reference<TransferDataContainer>&, sal_uInt8)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
int QtInstanceTreeView::n_children() const
|
|
|
|
{
|
2024-11-29 15:44:47 +01:00
|
|
|
SolarMutexGuard g;
|
|
|
|
|
|
|
|
int nChildCount;
|
|
|
|
GetQtInstance().RunInMainThread(
|
|
|
|
[&] { nChildCount = m_pModel->rowCount(m_pModel->invisibleRootItem()->index()); });
|
|
|
|
return nChildCount;
|
2024-11-09 00:28:06 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::make_sorted() { assert(false && "Not implemented yet"); }
|
|
|
|
|
|
|
|
void QtInstanceTreeView::make_unsorted() { assert(false && "Not implemented yet"); }
|
|
|
|
|
|
|
|
bool QtInstanceTreeView::get_sort_order() const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::set_sort_order(bool) { assert(false && "Not implemented yet"); }
|
|
|
|
|
|
|
|
void QtInstanceTreeView::set_sort_indicator(TriState, int)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
TriState QtInstanceTreeView::get_sort_indicator(int) const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return TRISTATE_INDET;
|
|
|
|
}
|
|
|
|
|
|
|
|
int QtInstanceTreeView::get_sort_column() const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::set_sort_column(int) { assert(false && "Not implemented yet"); }
|
|
|
|
|
2024-12-05 22:49:48 +01:00
|
|
|
void QtInstanceTreeView::clear()
|
|
|
|
{
|
|
|
|
SolarMutexGuard g;
|
|
|
|
|
2024-12-07 21:04:49 +01:00
|
|
|
GetQtInstance().RunInMainThread([&] {
|
|
|
|
// don't use QStandardItemModel::clear, as that would remove header data as well
|
|
|
|
m_pModel->removeRows(0, m_pModel->rowCount());
|
|
|
|
});
|
2024-12-05 22:49:48 +01:00
|
|
|
}
|
2024-11-09 00:28:06 +01:00
|
|
|
|
|
|
|
int QtInstanceTreeView::get_height_rows(int) const
|
|
|
|
{
|
2024-11-29 15:44:47 +01:00
|
|
|
SAL_WARN("vcl.qt", "QtInstanceTreeView::get_height_rows just returns 0 for now");
|
2024-11-09 00:28:06 +01:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2024-12-07 20:02:08 +01:00
|
|
|
void QtInstanceTreeView::columns_autosize()
|
|
|
|
{
|
|
|
|
SolarMutexGuard g;
|
|
|
|
|
|
|
|
GetQtInstance().RunInMainThread([&] {
|
|
|
|
for (int i = 0; i < m_pModel->columnCount(); i++)
|
|
|
|
m_pTreeView->resizeColumnToContents(i);
|
|
|
|
});
|
|
|
|
}
|
2024-11-09 00:28:06 +01:00
|
|
|
|
|
|
|
void QtInstanceTreeView::set_column_fixed_widths(const std::vector<int>&)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::set_column_editables(const std::vector<bool>&)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
int QtInstanceTreeView::get_column_width(int) const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::set_centered_column(int) { assert(false && "Not implemented yet"); }
|
|
|
|
|
|
|
|
OUString QtInstanceTreeView::get_column_title(int) const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return OUString();
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::set_column_title(int, const OUString&)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
2024-11-28 23:21:47 +01:00
|
|
|
void QtInstanceTreeView::set_selection_mode(SelectionMode eMode)
|
2024-11-09 00:28:06 +01:00
|
|
|
{
|
2024-11-28 23:21:47 +01:00
|
|
|
SolarMutexGuard g;
|
|
|
|
GetQtInstance().RunInMainThread(
|
|
|
|
[&] { m_pTreeView->setSelectionMode(mapSelectionMode(eMode)); });
|
2024-11-09 00:28:06 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
int QtInstanceTreeView::count_selected_rows() const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::remove_selection() { assert(false && "Not implemented yet"); }
|
|
|
|
|
|
|
|
bool QtInstanceTreeView::changed_by_hover() const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::vadjustment_set_value(int) { assert(false && "Not implemented yet"); }
|
|
|
|
|
|
|
|
int QtInstanceTreeView::vadjustment_get_value() const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::set_column_custom_renderer(int, bool)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::queue_draw() { assert(false && "Not implemented yet"); }
|
|
|
|
|
|
|
|
bool QtInstanceTreeView::get_dest_row_at_pos(const Point&, weld::TreeIter*, bool, bool)
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
void QtInstanceTreeView::unset_drag_dest_row() { assert(false && "Not implemented yet"); }
|
|
|
|
|
|
|
|
tools::Rectangle QtInstanceTreeView::get_row_area(const weld::TreeIter&) const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return tools::Rectangle();
|
|
|
|
}
|
|
|
|
|
|
|
|
weld::TreeView* QtInstanceTreeView::get_drag_source() const
|
|
|
|
{
|
|
|
|
assert(false && "Not implemented yet");
|
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
|
2024-11-28 23:21:47 +01:00
|
|
|
QAbstractItemView::SelectionMode QtInstanceTreeView::mapSelectionMode(SelectionMode eMode)
|
|
|
|
{
|
|
|
|
switch (eMode)
|
|
|
|
{
|
|
|
|
case SelectionMode::NONE:
|
|
|
|
return QAbstractItemView::NoSelection;
|
|
|
|
case SelectionMode::Single:
|
|
|
|
return QAbstractItemView::SingleSelection;
|
|
|
|
case SelectionMode::Range:
|
|
|
|
return QAbstractItemView::ContiguousSelection;
|
|
|
|
case SelectionMode::Multiple:
|
|
|
|
return QAbstractItemView::ExtendedSelection;
|
|
|
|
default:
|
|
|
|
assert(false && "unhandled selection mode");
|
|
|
|
return QAbstractItemView::SingleSelection;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-11-30 01:36:47 +01:00
|
|
|
void QtInstanceTreeView::handleActivated()
|
|
|
|
{
|
|
|
|
SolarMutexGuard g;
|
|
|
|
signal_row_activated();
|
|
|
|
}
|
|
|
|
|
2024-12-05 23:46:35 +01:00
|
|
|
void QtInstanceTreeView::handleSelectionChanged()
|
2024-11-30 01:51:28 +01:00
|
|
|
{
|
|
|
|
SolarMutexGuard g;
|
2024-12-06 09:48:44 +01:00
|
|
|
signal_selection_changed();
|
2024-11-30 01:51:28 +01:00
|
|
|
}
|
|
|
|
|
2024-11-18 09:33:05 +01:00
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
|