Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.11 KB | None | 0 0
  1. #ifndef MDBMODELSORTER_H
  2. #define MDBMODELSORTER_H
  3.  
  4. #include <QDomNodeList>
  5. #include <QHash>
  6. #include <QVariant>
  7.  
  8. class MDBModelSorter
  9. {
  10. public:
  11. MDBModelSorter( const QDomNodeList& _nodes, QHash<int, int>& _mapping, int _column = 0, int role = Qt::DisplayRole );
  12.  
  13. bool operator()( const QVariant& left, const QVariant& right ) const;
  14.  
  15. template<class T> void sort( Qt::SortOrder order );
  16.  
  17. protected:
  18. const QDomNodeList* nodes;
  19. QHash<int, int>* mapping;
  20. int column;
  21. int role;
  22.  
  23. void sortAscending( const QMap<QVariant, int>& entries );
  24. void sortDescending( const QMap<QVariant, int>& entries );
  25. };
  26.  
  27. template<class T> void MDBModelSorter::sort( Qt::SortOrder order )
  28. {
  29. QMap<QVariant, int> entries;
  30.  
  31. // implicit sorting keeping native row
  32. for ( int i = 0; i < nodes->count(); i++ ) {
  33. const QDomNode release = nodes->at( i );
  34. const QVariant value = T::nodeData( release, column, role );
  35. entries.insertMulti( value, i );
  36. }
  37.  
  38. // sorting
  39. switch ( order ) {
  40. case Qt::AscendingOrder:
  41. sortAscending( entries );
  42. break;
  43. case Qt::DescendingOrder:
  44. sortDescending( entries );
  45. break;
  46. }
  47. }
  48.  
  49. #endif // MDBMODELSORTER_H
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement