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

MerginMaps / input / 6046428848

01 Sep 2023 06:59AM UTC coverage: 62.11% (+0.05%) from 62.056%
6046428848

push

github

web-flow
Merge pull request #2775 from MerginMaps/cppcheck

Cppcheck

7560 of 12172 relevant lines covered (62.11%)

102.48 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 )
×
23
  {
24
    setFilterRole( ProjectsModel::ProjectFullName );
×
25
    setFilterCaseSensitivity( Qt::CaseInsensitive );
×
26
    sort( 0, Qt::AscendingOrder );
×
27
  }
28
}
×
29

30
QString ProjectsProxyModel::searchExpression() const
×
31
{
32
  return mSearchExpression;
×
33
}
34

35
ProjectsModel *ProjectsProxyModel::projectSourceModel() const
×
36
{
37
  return mModel;
×
38
}
39

40
void ProjectsProxyModel::setSearchExpression( QString searchExpression )
×
41
{
42
  if ( mSearchExpression == searchExpression )
×
43
    return;
×
44

45
  mSearchExpression = searchExpression;
×
46
  setFilterFixedString( mSearchExpression );
×
47
  emit searchExpressionChanged( mSearchExpression );
×
48
}
49

50
void ProjectsProxyModel::setProjectSourceModel( ProjectsModel *sourceModel )
×
51
{
52
  if ( mModel == sourceModel )
×
53
    return;
×
54

55
  mModel = sourceModel;
×
56
  QObject::connect( mModel, &ProjectsModel::modelInitialized, this, &ProjectsProxyModel::initialize );
×
57
}
58

59
bool ProjectsProxyModel::lessThan( const QModelIndex &left, const QModelIndex &right ) const
×
60
{
61
  if ( mModelType == ProjectsModel::LocalProjectsModel )
×
62
  {
63
    bool lProjectIsMergin = mModel->data( left, ProjectsModel::ProjectIsMergin ).toBool();
×
64
    bool rProjectIsMergin = mModel->data( right, ProjectsModel::ProjectIsMergin ).toBool();
×
65

66
    /**
67
     * Ordering of local projects: first non-mergin projects (using folder name),
68
     * then mergin projects (sorted first by namespace, then project name)
69
     */
70

71
    if ( !lProjectIsMergin && !rProjectIsMergin )
×
72
    {
73
      QString lProjectFullName = mModel->data( left, ProjectsModel::ProjectFullName ).toString();
×
74
      QString rProjectFullName = mModel->data( right, ProjectsModel::ProjectFullName ).toString();
×
75

76
      return lProjectFullName.compare( rProjectFullName, Qt::CaseInsensitive ) < 0;
×
77
    }
×
78
    if ( !lProjectIsMergin && rProjectIsMergin )
×
79
    {
80
      return true;
×
81
    }
82
    if ( lProjectIsMergin && !rProjectIsMergin )
×
83
    {
84
      return false;
×
85
    }
86
  }
87

88
  // comparing 2 mergin projects
89
  QString lNamespace = mModel->data( left, ProjectsModel::ProjectNamespace ).toString();
×
90
  QString lProjectName = mModel->data( left, ProjectsModel::ProjectName ).toString();
×
91
  QString rNamespace = mModel->data( right, ProjectsModel::ProjectNamespace ).toString();
×
92
  QString rProjectName = mModel->data( right, ProjectsModel::ProjectName ).toString();
×
93

94
  if ( lNamespace == rNamespace )
×
95
  {
96
    return lProjectName.compare( rProjectName, Qt::CaseInsensitive ) < 0;
×
97
  }
98
  return lNamespace.compare( rNamespace, Qt::CaseInsensitive ) < 0;
×
99
}
×
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