• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

MerginMaps / input / 4487852520

pending completion
4487852520

push

github

Unknown Committer
Unknown Commit Message

7953 of 13072 relevant lines covered (60.84%)

107.28 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/app/projectsproxymodel.cpp
1
/***************************************************************************
2
 *                                                                         *
3
 *   This program is free software; you can redistribute it and/or modify  *
4
 *   it under the terms of the GNU General Public License as published by  *
5
 *   the Free Software Foundation; either version 2 of the License, or     *
6
 *   (at your option) any later version.                                   *
7
 *                                                                         *
8
 ***************************************************************************/
9

10
#include "projectsproxymodel.h"
11

12
ProjectsProxyModel::ProjectsProxyModel( QObject *parent ) : QSortFilterProxyModel( parent )
×
13
{
×
14
}
×
15

16
void ProjectsProxyModel::initialize()
×
17
{
18
  setSourceModel( mModel );
×
19
  mModelType = mModel->modelType();
×
20

21
  // do not sort at all in public projects, they come sorted from Mergin
22
  if ( mModelType == ProjectsModel::LocalProjectsModel || mModelType == ProjectsModel::CreatedProjectsModel )
×
23
  {
24
    if ( mModelType == ProjectsModel::CreatedProjectsModel )
×
25
      setFilterRole( ProjectsModel::ProjectName );
×
26
    else
27
      setFilterRole( ProjectsModel::ProjectFullName );
×
28

29
    setFilterCaseSensitivity( Qt::CaseInsensitive );
×
30

31
    sort( 0, Qt::AscendingOrder );
×
32
  }
×
33
}
×
34

35
QString ProjectsProxyModel::searchExpression() const
×
36
{
37
  return mSearchExpression;
×
38
}
39

40
ProjectsModel *ProjectsProxyModel::projectSourceModel() const
×
41
{
42
  return mModel;
×
43
}
44

45
void ProjectsProxyModel::setSearchExpression( QString searchExpression )
×
46
{
47
  if ( mSearchExpression == searchExpression )
×
48
    return;
×
49

50
  mSearchExpression = searchExpression;
×
51
  setFilterFixedString( mSearchExpression );
×
52
  emit searchExpressionChanged( mSearchExpression );
×
53
}
×
54

55
void ProjectsProxyModel::setProjectSourceModel( ProjectsModel *sourceModel )
×
56
{
57
  if ( mModel == sourceModel )
×
58
    return;
×
59

60
  mModel = sourceModel;
×
61
  QObject::connect( mModel, &ProjectsModel::modelInitialized, this, &ProjectsProxyModel::initialize );
×
62
}
×
63

64
bool ProjectsProxyModel::lessThan( const QModelIndex &left, const QModelIndex &right ) const
×
65
{
66
  if ( mModelType == ProjectsModel::LocalProjectsModel )
×
67
  {
68
    bool lProjectIsMergin = mModel->data( left, ProjectsModel::ProjectIsMergin ).toBool();
×
69
    bool rProjectIsMergin = mModel->data( right, ProjectsModel::ProjectIsMergin ).toBool();
×
70

71
    /**
72
     * Ordering of local projects: first non-mergin projects (using folder name),
73
     * then mergin projects (sorted first by namespace, then project name)
74
     */
75

76
    if ( !lProjectIsMergin && !rProjectIsMergin )
×
77
    {
78
      QString lProjectFullName = mModel->data( left, ProjectsModel::ProjectFullName ).toString();
×
79
      QString rProjectFullName = mModel->data( right, ProjectsModel::ProjectFullName ).toString();
×
80

81
      return lProjectFullName.compare( rProjectFullName, Qt::CaseInsensitive ) < 0;
×
82
    }
×
83
    if ( !lProjectIsMergin && rProjectIsMergin )
×
84
    {
85
      return true;
×
86
    }
87
    if ( lProjectIsMergin && !rProjectIsMergin )
×
88
    {
89
      return false;
×
90
    }
91
  }
×
92

93
  // comparing 2 mergin projects
94
  QString lNamespace = mModel->data( left, ProjectsModel::ProjectNamespace ).toString();
×
95
  QString lProjectName = mModel->data( left, ProjectsModel::ProjectName ).toString();
×
96
  QString rNamespace = mModel->data( right, ProjectsModel::ProjectNamespace ).toString();
×
97
  QString rProjectName = mModel->data( right, ProjectsModel::ProjectName ).toString();
×
98

99
  if ( lNamespace == rNamespace )
×
100
  {
101
    return lProjectName.compare( rProjectName, Qt::CaseInsensitive ) < 0;
×
102
  }
103
  return lNamespace.compare( rNamespace, Qt::CaseInsensitive ) < 0;
×
104
}
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc