GitHub Viewer
#include
#include
#include
#include
#include
#include "Data.h"
#include "RemoteDatabase.h"
#include "RemoteLocalFilesModel.h"
#include "RemoteNetwork.h"
#include "Settings.h"
using json = nlohmann::json;
RemoteLocalFilesModel::RemoteLocalFilesModel(QObject* parent, RemoteDatabase& remote) :
QAbstractItemModel(parent),
remoteDatabase(remote)
{
QStringList header;
header setText(ColumnName, user_name);
user_node->setIcon(ColumnName, QIcon(user_name == current_user_name ? ":/icons/folder_user" : ":/icons/folder"));
}
// Get file information
QFile file_info(Settings::getValue("remote", "clonedirectory").toString() + "/" + QString::fromStdString(file.file));
// Add file to user node
QTreeWidgetItem* file_node = new QTreeWidgetItem(user_node);
file_node->setText(ColumnName, QString::fromStdString(file.name));
file_node->setIcon(ColumnName, QIcon(":/icons/database"));
file_node->setText(ColumnBranch, QString::fromStdString(file.branch));
file_node->setText(ColumnLastModified, QLocale::system().toString(QFileInfo(file_info).lastModified().toLocalTime(), QLocale::ShortFormat));
file_node->setText(ColumnSize, humanReadableSize(static_cast(file_info.size())));
file_node->setText(ColumnCommit, QString::fromStdString(file.commit_id));
file_node->setText(ColumnFile, QString::fromStdString(file.file));
}
// Refresh the view
endResetModel();
}
QModelIndex RemoteLocalFilesModel::index(int row, int column, const QModelIndex& parent) const
{
if(!hasIndex(row, column, parent))
return QModelIndex();
QTreeWidgetItem *parentItem;
if(!parent.isValid())
parentItem = rootItem;
else
parentItem = static_cast(parent.internalPointer());
QTreeWidgetItem* childItem = parentItem->child(row);
if(childItem)
return createIndex(row, column, childItem);
else
return QModelIndex();
}
QModelIndex RemoteLocalFilesModel::parent(const QModelIndex& index) const
{
if(!index.isValid())
return QModelIndex();
QTreeWidgetItem* childItem = static_cast(index.internalPointer());
QTreeWidgetItem* parentItem = childItem->parent();
if(parentItem == rootItem)
return QModelIndex();
else
return createIndex(0, 0, parentItem);
}
QVariant RemoteLocalFilesModel::data(const QModelIndex& index, int role) const
{
if(!index.isValid())
return QVariant();
// Get the item the index points at
QTreeWidgetItem* item = static_cast(index.internalPointer());
// Return data depending on the role
switch(role)
{
case Qt::DisplayRole:
case Qt::EditRole:
return item->text(index.column());
case Qt::DecorationRole:
return item->icon(index.column());
default:
return QVariant();
}
}
QVariant RemoteLocalFilesModel::headerData(int section, Qt::Orientation orientation, int role) const
{
// Get the header string from the root item
if(orientation == Qt::Horizontal && role == Qt::DisplayRole)
return rootItem->data(section, role);
return QVariant();
}
int RemoteLocalFilesModel::rowCount(const QModelIndex& parent) const
{
if(parent.column() > 0)
return 0;
if(!parent.isValid())
return rootItem->childCount();
else
return static_cast(parent.internalPointer())->childCount();
}
int RemoteLocalFilesModel::columnCount(const QModelIndex& /*parent*/) const
{
return rootItem->columnCount();
}
bool RemoteLocalFilesModel::removeRows(int row, int count, const QModelIndex& parent)
{
for(int i=0;i=0;i--)
{
auto item = static_cast(index(row + i, 0, parent).internalPointer());
item->parent()->removeChild(item);
}
endRemoveRows();
// If parent node is empty, remove that one too. Make sure to not remove the root node
if(parent.isValid() && !index(0, 0, parent).isValid())
{
beginRemoveRows(parent.parent(), 0, 0);
auto item = static_cast(parent.internalPointer());
item->parent()->removeChild(item);
endRemoveRows();
}
return true;
}