Initial commit

This commit is contained in:
torsten committed 2026-08-13 18:33:10 +02:00
commit b7d90b9afe
16245 files changed
+3396666

No files matched your search

@@ -0,0 +1,95 @@
/**
* @RDE_HEADER@
* Proxy Model for hiding empty tracks and sorting tracks by name plus having the "Markers" track always at the top
* $Id: $
* $HeadURL: $
* $Author: $
*
* Created by Mike Lennart Wille, SLTE, 2022-06-22
*/
#include "tln_timeline_proxy_model.h"
#include "tln_timeline_model.h"
namespace Timeline
{
TimelineProxyModel::TimelineProxyModel()
: QSortFilterProxyModel()
{
//setDynamicSortFilter(true);
setRecursiveFilteringEnabled(true); // if child gets items for the first time then also show the parent so that the child becomes visible ;)
}
void TimelineProxyModel::toggleShowAllRows()
{
m_forceShowAllRows = !m_forceShowAllRows;
invalidateFilter();
}
bool TimelineProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
{
if (m_forceShowAllRows)
return true;
auto index = sourceModel()->index(source_row, 1, source_parent);
auto index2 = sourceModel()->index(source_row, 0, source_parent);
if (index.data(Qt::UserRole).toInt() == 666) // always show markers
{
return true;
}
int trackId = index.data().toInt();
// TODO: correct solution instead of accessing the TimelineModel directly and depending on it??
if (m_modelCachedPointer == nullptr)
m_modelCachedPointer = qobject_cast<TimelineModel *>(sourceModel());
try
{
const Track &t = m_modelCachedPointer->track(trackId);
return t.hasItems();
}
catch (...)
{
Q_ASSERT(false);
return true; // bail
}
}
bool TimelineProxyModel::lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const
{
//qWarning() << "lessThan";
// Qt doc: "Returns true if [..] source_left is less than [..] source_right, otherwise returns false."
// NOTE: only eItems is supported
//qWarning() << "lessThan marker source_left" << source_left.data(Qt::UserRole).toInt() << " "<< source_left.data(Qt::DisplayRole).toString();
//qWarning() << "lessThan marker source_right" << source_right.data(Qt::UserRole).toInt() << " "<< source_right.data(Qt::DisplayRole).toString();
// markers
if (source_left.data(Qt::UserRole).toInt() == 1)
{
return true;
}
if (source_right.data(Qt::UserRole).toInt() == 1)
{
return false;
}
//Number compare
bool okL = false;
bool okR = false;
int intL = source_left.data().toInt(&okL);
int intR = source_right.data().toInt(&okR);
if (okL && okR)
return intL < intR;
//String Compare
return QString::compare(source_left.data().toString(), source_right.data().toString()) < 0;
//return QSortFilterProxyModel::lessThan(source_left, source_right);
}
} // namespace Timeline