eventsmodel.cpp
105 lines
| 2.8 KiB
| text/x-c
|
CppLexer
r1407 | /* | |||
This file is part of SciQLop. | ||||
SciQLop is free software: you can redistribute it and/or modify | ||||
it under the terms of the GNU General Public License as published by | ||||
the Free Software Foundation, either version 3 of the License, or | ||||
(at your option) any later version. | ||||
SciQLop is distributed in the hope that it will be useful, | ||||
but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
GNU General Public License for more details. | ||||
You should have received a copy of the GNU General Public License | ||||
along with SciQLop. If not, see <https://www.gnu.org/licenses/>. | ||||
*/ | ||||
r1406 | #include "Catalogue2/eventsmodel.h" | |||
#include <SqpApplication.h> | ||||
r1408 | #include <Common/containers.h> | |||
r1406 | ||||
EventsModel::EventsModel(QObject* parent) : QAbstractItemModel(parent) {} | ||||
EventsModel::ItemType EventsModel::type(const QModelIndex& index) const | ||||
{ | ||||
r1408 | if (EventsModelItem* item = to_item(index)) | |||
r1406 | { | |||
r1408 | return item->type; | |||
r1406 | } | |||
r1408 | return ItemType::None; | |||
r1406 | } | |||
QVariant EventsModel::data(const QModelIndex& index, int role) const | ||||
{ | ||||
r1408 | if (index.isValid()) | |||
r1406 | { | |||
r1408 | return to_item(index)->data(index.column(),role); | |||
r1406 | } | |||
return QVariant {}; | ||||
} | ||||
QModelIndex EventsModel::index(int row, int column, const QModelIndex& parent) const | ||||
{ | ||||
if (!hasIndex(row, column, parent)) | ||||
{ | ||||
return QModelIndex(); | ||||
} | ||||
switch (type(parent)) | ||||
{ | ||||
r1408 | case ItemType::None: // is an event | |||
return createIndex(row, column, _items[row].get()); | ||||
case ItemType::Event: // is a product | ||||
return createIndex(row, column, to_item(parent)->children[row].get()); | ||||
case ItemType::Product: | ||||
QModelIndex(); | ||||
r1406 | } | |||
return QModelIndex(); | ||||
} | ||||
QModelIndex EventsModel::parent(const QModelIndex& index) const | ||||
{ | ||||
r1408 | auto item = to_item(index); | |||
if (item->type == ItemType::Product) | ||||
r1406 | { | |||
r1408 | auto repoIndex = SciQLop::containers::index_of(_items, item->parent); | |||
return createIndex(repoIndex, 0, item->parent); | ||||
r1406 | } | |||
return QModelIndex(); | ||||
} | ||||
int EventsModel::rowCount(const QModelIndex& parent) const | ||||
{ | ||||
if (parent.column() > 0) | ||||
{ | ||||
return 0; | ||||
} | ||||
switch (type(parent)) | ||||
{ | ||||
r1408 | case ItemType::None: | |||
return _items.size(); | ||||
case ItemType::Event: | ||||
return to_item(parent)->children.size(); | ||||
case ItemType::Product: | ||||
r1406 | break; | |||
} | ||||
return 0; | ||||
} | ||||
int EventsModel::columnCount(const QModelIndex& parent) const | ||||
{ | ||||
return static_cast<int>(EventsModel::Columns::NbColumn); | ||||
} | ||||
QVariant EventsModel::headerData(int section, Qt::Orientation orientation, int role) const | ||||
{ | ||||
if (orientation == Qt::Horizontal && role == Qt::DisplayRole && section < ColumnsNames.size()) | ||||
{ | ||||
return ColumnsNames[section]; | ||||
} | ||||
return QVariant(); | ||||
} | ||||
void EventsModel::sort(int column, Qt::SortOrder order) {} | ||||