File indexing completed on 2024-05-05 05:35:33

0001 #ifndef ItemModel_h
0002 #define ItemModel_h
0003 
0004 //////////////////////////////////////////////////////////////////////////////
0005 // itemmodel.h
0006 // -------------------
0007 //
0008 // SPDX-FileCopyrightText: 2009-2010 Hugo Pereira Da Costa <hugo.pereira@free.fr>
0009 //
0010 // SPDX-License-Identifier: MIT
0011 //////////////////////////////////////////////////////////////////////////////
0012 
0013 #include "oxygen_export.h"
0014 
0015 #include <QAbstractItemModel>
0016 
0017 namespace Oxygen
0018 {
0019 //* Job model. Stores job information for display in lists
0020 class OXYGEN_EXPORT ItemModel : public QAbstractItemModel
0021 {
0022 public:
0023     //* constructor
0024     explicit ItemModel(QObject * = nullptr);
0025 
0026     //* return all indexes in model starting from parent [recursive]
0027     QModelIndexList indexes(int column = 0, const QModelIndex &parent = QModelIndex()) const;
0028 
0029     //*@name sorting
0030     //@{
0031 
0032     //* sort
0033     void sort(void)
0034     {
0035         sort(sortColumn(), sortOrder());
0036     }
0037 
0038     //* sort
0039     void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
0040 
0041     //* current sorting column
0042     int sortColumn(void) const
0043     {
0044         return _sortColumn;
0045     }
0046 
0047     //* current sort order
0048     Qt::SortOrder sortOrder(void) const
0049     {
0050         return _sortOrder;
0051     }
0052 
0053     //@}
0054 
0055 protected:
0056     //* this sort columns without calling the layout changed callbacks
0057     void privateSort(void)
0058     {
0059         privateSort(sortColumn(), sortOrder());
0060     }
0061 
0062     //* private sort, with no signals emmitted
0063     virtual void privateSort(int column, Qt::SortOrder order) = 0;
0064 
0065     //* used to sort items in list
0066     class SortFTor
0067     {
0068     public:
0069         //* constructor
0070         explicit SortFTor(const int &type, Qt::SortOrder order = Qt::AscendingOrder)
0071             : _type(type)
0072             , _order(order)
0073         {
0074         }
0075 
0076     protected:
0077         //* column
0078         int _type = 0;
0079 
0080         //* order
0081         Qt::SortOrder _order = Qt::AscendingOrder;
0082     };
0083 
0084 private:
0085     //* sorting column
0086     int _sortColumn = 0;
0087 
0088     //* sorting order
0089     Qt::SortOrder _sortOrder = Qt::AscendingOrder;
0090 };
0091 }
0092 
0093 #endif