#include "bindroutetablemodel.h"
#include "qdebug.h"

BindRouteTableModel::BindRouteTableModel(QObject *parent)
    : QAbstractTableModel{parent}
{

}

BindRouteTableModel::~BindRouteTableModel()
{

}

int BindRouteTableModel::getRowCount()
{
    return rowCount();
}

void BindRouteTableModel::setBeginResetModel()
{
    //重置model数据之前调用beginResetModel,此时会触发modelAboutToBeReset信号
    beginResetModel();
}

void BindRouteTableModel::setEndResetModel()
{
    //数据设置结束后调用endResetModel,此时会触发modelReset信号
    endResetModel();
}

//获取行数
int BindRouteTableModel::rowCount(const QModelIndex &parent) const
{
    if(parent.isValid())
    {
        return 0;
    }
    else
    {
        return routeData.points.size();
    }
}

//获取列数
int BindRouteTableModel::columnCount(const QModelIndex &parent) const
{
    if(parent.isValid())
    {
        return 0;
    }
    else
    {
        return m_headData.size();
    }
}

//获取单元格数据
QVariant BindRouteTableModel::data(const QModelIndex &index, int role) const
{
    if (!index.isValid() || index.column()>=columnCount() || index.row()>=rowCount())
    {
        return QVariant();
    }

    if(role==Qt::DisplayRole)
    {
        switch (index.column()) {
        case 0: //航线编号
            return routeData.routeNumber;
            break;
        case 1://航点
            return routeData.points.keys().at(index.row());
            break;
        case 2://lon
            return QString::number(routeData.points[index.row()].x(),'f',6);
            break;
        case 3://lat
            return QString::number(routeData.points[index.row()].y(),'f',6);
            break;
        case 4: //导航高度
        {
            if(index.row()==0)
            {
                return QString::number(0,'f',2);
            }
            else
            {
//                return QString::number(routeData.routeHeight,'f',2);
                return QString::number(routeData.points[index.row()].z(),'f',2);
            }
            break;
        }
        case 5: //航路特征
        {
            if(index.row()==rowCount()-1)
            {
                return "01";
            }
            else
            {
                return routeData.routeFeatures;
            }
            break;
        }
        case 6:
            return routeData.bindState;
            break;
        default:
            return QVariant();
            break;
        }
    }

    if(role==Qt::TextAlignmentRole) //对其方式
    {
        return Qt::AlignCenter; //对齐格式为居中
    }

    return QVariant();
}

//设置单元格数据
bool BindRouteTableModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
    if(role != Qt::EditRole || !index.isValid() || index.row() >= rowCount() || index.column() >= columnCount())
    {
        return false;
    }
    if (index.isValid() && role == Qt::EditRole)
    {
//		strList.replace(index.row(), value.toString());

        //通知view调用model中的data渲染界面
        emit dataChanged(index, index);
        return true;
    }
    return false;

}

//获取表头数据
QVariant BindRouteTableModel::headerData(int section, Qt::Orientation orientation, int role) const
{
    //水平表头显示信息
    switch (role) {
    case Qt::DisplayRole:
        if(orientation==Qt::Horizontal && section>=0 && section <= columnCount())
            return m_headData.at(section);
        break;
    default:
        break;
    }
    return QAbstractItemModel::headerData(section,orientation,role);
}

//编辑相关函数
Qt::ItemFlags BindRouteTableModel::flags(const QModelIndex &index) const
{
    if (!index.isValid())
    {
        return Qt::ItemIsEnabled;
    }
    if(index.column()==4) //设置仅高度列可编辑
    {
        return QAbstractItemModel::flags(index) | Qt::ItemIsEditable;
    }
    else
    {
        return Qt::ItemIsEnabled;
    }

}