##// END OF EJS Templates
Really basic implementation of Downloader which might replace current...
Really basic implementation of Downloader which might replace current NetworkController It is currently really basic, it only does synchronous DLs with or without authentication. It is written to isolate as much as possible Qt Network classes. Signed-off-by: Alexis Jeandet <alexis.jeandet@member.fsf.org>

File last commit:

r1308:c5e93e891fc6
r1342:91cbf8a85daf
Show More
CatalogueTreeModel.cpp
219 lines | 5.8 KiB | text/x-c | CppLexer
/ gui / src / Catalogue / CatalogueTreeModel.cpp
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 #include "Catalogue/CatalogueTreeModel.h"
Refactoring of catalogue: use a custom item class
r1229 #include <Catalogue/CatalogueTreeItems/CatalogueAbstractTreeItem.h>
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228
Refactoring of catalogue: use a custom item class
r1229 #include <QMimeData>
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 #include <memory>
Refactoring of catalogue: use a custom item class
r1229 #include <Common/MimeTypesDef.h>
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 struct CatalogueTreeModel::CatalogueTreeModelPrivate {
Refactoring of catalogue: use a custom item class
r1229 std::unique_ptr<CatalogueAbstractTreeItem> m_RootItem = nullptr;
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228
Refactoring of catalogue: use a custom item class
r1229 CatalogueTreeModelPrivate() : m_RootItem{std::make_unique<CatalogueAbstractTreeItem>()} {}
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 };
CatalogueTreeModel::CatalogueTreeModel(QObject *parent)
: QAbstractItemModel(parent), impl{spimpl::make_unique_impl<CatalogueTreeModelPrivate>()}
{
}
Refactoring of catalogue: use a custom item class
r1229 QModelIndex CatalogueTreeModel::addTopLevelItem(CatalogueAbstractTreeItem *item)
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 {
Refactoring of catalogue: use a custom item class
r1229 auto nbTopLevelItems = impl->m_RootItem->children().count();
beginInsertRows(QModelIndex(), nbTopLevelItems, nbTopLevelItems);
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 impl->m_RootItem->addChild(item);
endInsertRows();
Refactoring of catalogue: use a custom item class
r1229 emit dataChanged(QModelIndex(), QModelIndex());
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228
Refactoring of catalogue: use a custom item class
r1229 return index(nbTopLevelItems, 0);
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 }
Refactoring of catalogue: use a custom item class
r1229 QVector<CatalogueAbstractTreeItem *> CatalogueTreeModel::topLevelItems() const
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 {
Refactoring of catalogue: use a custom item class
r1229 return impl->m_RootItem->children();
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 }
Refactoring of catalogue: use a custom item class
r1229 void CatalogueTreeModel::addChildItem(CatalogueAbstractTreeItem *child,
const QModelIndex &parentIndex)
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 {
auto parentItem = item(parentIndex);
Refactoring of catalogue: use a custom item class
r1229 int c = parentItem->children().count();
beginInsertRows(parentIndex, c, c);
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 parentItem->addChild(child);
endInsertRows();
Refactoring of catalogue: use a custom item class
r1229
Drop of events on a catalogue
r1230 emit dataChanged(parentIndex, parentIndex);
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 }
Add catalogue handling
r1302 void CatalogueTreeModel::removeChildItem(CatalogueAbstractTreeItem *child,
const QModelIndex &parentIndex)
{
auto parentItem = item(parentIndex);
int i = parentItem->children().indexOf(child);
beginRemoveRows(parentIndex, i, i);
parentItem->removeChild(child);
endRemoveRows();
emit dataChanged(parentIndex, parentIndex);
}
void CatalogueTreeModel::refresh(const QModelIndex &index)
{
emit dataChanged(index, index);
}
Refactoring of catalogue: use a custom item class
r1229 CatalogueAbstractTreeItem *CatalogueTreeModel::item(const QModelIndex &index) const
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 {
Refactoring of catalogue: use a custom item class
r1229 return static_cast<CatalogueAbstractTreeItem *>(index.internalPointer());
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 }
Refactoring of catalogue: use a custom item class
r1229 QModelIndex CatalogueTreeModel::indexOf(CatalogueAbstractTreeItem *item, int column) const
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 {
auto parentItem = item->parent();
if (!parentItem) {
return QModelIndex();
}
Refactoring of catalogue: use a custom item class
r1229 auto row = parentItem->children().indexOf(item);
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 return createIndex(row, column, item);
}
QModelIndex CatalogueTreeModel::index(int row, int column, const QModelIndex &parent) const
{
Refactoring of catalogue: use a custom item class
r1229 if (column > 0) {
int a = 0;
}
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 if (!hasIndex(row, column, parent)) {
return QModelIndex();
}
Refactoring of catalogue: use a custom item class
r1229 CatalogueAbstractTreeItem *parentItem = nullptr;
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228
if (!parent.isValid()) {
parentItem = impl->m_RootItem.get();
}
else {
Refactoring of catalogue: use a custom item class
r1229 parentItem = item(parent);
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 }
Refactoring of catalogue: use a custom item class
r1229 auto childItem = parentItem->children().value(row);
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 if (childItem) {
return createIndex(row, column, childItem);
}
return QModelIndex();
}
QModelIndex CatalogueTreeModel::parent(const QModelIndex &index) const
{
if (!index.isValid()) {
return QModelIndex();
}
Refactoring of catalogue: use a custom item class
r1229 auto childItem = item(index);
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 auto parentItem = childItem->parent();
if (parentItem == nullptr || parentItem->parent() == nullptr) {
return QModelIndex();
}
Refactoring of catalogue: use a custom item class
r1229 auto row = parentItem->parent()->children().indexOf(parentItem);
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 return createIndex(row, 0, parentItem);
}
int CatalogueTreeModel::rowCount(const QModelIndex &parent) const
{
Refactoring of catalogue: use a custom item class
r1229 CatalogueAbstractTreeItem *parentItem = nullptr;
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228
if (!parent.isValid()) {
parentItem = impl->m_RootItem.get();
}
else {
Refactoring of catalogue: use a custom item class
r1229 parentItem = item(parent);
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 }
Refactoring of catalogue: use a custom item class
r1229 return parentItem->children().count();
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 }
int CatalogueTreeModel::columnCount(const QModelIndex &parent) const
{
return (int)Column::Count;
}
Qt::ItemFlags CatalogueTreeModel::flags(const QModelIndex &index) const
{
Refactoring of catalogue: use a custom item class
r1229 auto treeItem = item(index);
if (treeItem) {
return treeItem->flags(index.column());
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 }
return Qt::NoItemFlags;
}
QVariant CatalogueTreeModel::data(const QModelIndex &index, int role) const
{
Refactoring of catalogue: use a custom item class
r1229 auto treeItem = item(index);
if (treeItem) {
return treeItem->data(index.column(), role);
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 }
return QModelIndex();
}
bool CatalogueTreeModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
Refactoring of catalogue: use a custom item class
r1229 auto treeItem = item(index);
if (treeItem) {
auto result = treeItem->setData(index.column(), role, value);
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228
Refactoring of catalogue: use a custom item class
r1229 if (result && index.column() == (int)Column::Name) {
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 emit itemRenamed(index);
}
Refactoring of catalogue: use a custom item class
r1229 return result;
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 }
return false;
}
Move event in catalogue with Drag&Drop
r1308
Refactoring of catalogue: use a custom item class
r1229 bool CatalogueTreeModel::canDropMimeData(const QMimeData *data, Qt::DropAction action, int row,
int column, const QModelIndex &parent) const
{
auto draggedIndex = parent;
auto draggedItem = item(draggedIndex);
if (draggedItem) {
return draggedItem->canDropMimeData(data, action);
}
return false;
}
bool CatalogueTreeModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row,
int column, const QModelIndex &parent)
{
Drop of events on a catalogue
r1230 bool result = false;
auto draggedIndex = parent;
auto draggedItem = item(draggedIndex);
if (draggedItem) {
result = draggedItem->dropMimeData(data, action);
if (result) {
Move event in catalogue with Drag&Drop
r1308 emit itemDropped(draggedIndex, data, action);
Drop of events on a catalogue
r1230 }
}
return result;
Refactoring of catalogue: use a custom item class
r1229 }
Qt::DropActions CatalogueTreeModel::supportedDropActions() const
{
return Qt::CopyAction | Qt::MoveAction;
}
QStringList CatalogueTreeModel::mimeTypes() const
{
Move event in catalogue with Drag&Drop
r1308 return {MIME_TYPE_EVENT_LIST, MIME_TYPE_SOURCE_CATALOGUE_LIST};
Refactoring of catalogue: use a custom item class
r1229 }