bool DigitizerSetTreeItem::addData(const FIFFLIB::FiffDigPointSet& tDigitizer, Qt3DCore::QEntity* parent)
{
    bool state = false;

    //parsing the digitizer List
    QList<FIFFLIB::FiffDigPoint> tNasion;
    QList<FIFFLIB::FiffDigPoint> tLAP;
    QList<FIFFLIB::FiffDigPoint> tRAP;
    QList<FIFFLIB::FiffDigPoint> tHpi;
    QList<FIFFLIB::FiffDigPoint> tEeg;
    QList<FIFFLIB::FiffDigPoint> tExtra;

    for(int i = 0; i < tDigitizer.size(); ++i){
        switch (tDigitizer[i].kind) {
        case FIFFV_POINT_CARDINAL:
            switch (tDigitizer[i].ident) {
            case FIFFV_POINT_LPA:
                tLAP.append(tDigitizer[i]);
            break;
            case FIFFV_POINT_NASION:
                tNasion.append(tDigitizer[i]);
            break;
            case FIFFV_POINT_RPA:
                tRAP.append(tDigitizer[i]);
            break;
            default:
            break;
            }
            break;
        case FIFFV_POINT_HPI:
            tHpi.append(tDigitizer[i]);
            break;
        case FIFFV_POINT_EEG:
            tEeg.append(tDigitizer[i]);
            break;
        case FIFFV_POINT_EXTRA:
            tExtra.append(tDigitizer[i]);
            break;
        default:
            break;
        }
    }

    // Find the Digitizer Items
    QList<QStandardItem*> itemList = this->findChildren(Data3DTreeModelItemTypes::DigitizerItem);

    if (!tLAP.empty()){
        //Create a LAP digitizer item
        DigitizerTreeItem* digitizerItem = new DigitizerTreeItem(Data3DTreeModelItemTypes::DigitizerItem,"LAP");
        state = digitizerItem->addData(tLAP, parent);
        itemList << digitizerItem;
        itemList << new QStandardItem(digitizerItem->toolTip());
        this->appendRow(itemList);
        itemList.clear();
    }
    if (!tNasion.empty()){
        //Create a Nasion digitizer item
        DigitizerTreeItem* digitizerItem = new DigitizerTreeItem(Data3DTreeModelItemTypes::DigitizerItem,"Nasion");
        state = digitizerItem->addData(tNasion, parent);
        itemList << digitizerItem;
        itemList << new QStandardItem(digitizerItem->toolTip());
        this->appendRow(itemList);
        itemList.clear();
    }
    if (!tRAP.empty()){
        //Create a RAO digitizer item
        DigitizerTreeItem* digitizerItem = new DigitizerTreeItem(Data3DTreeModelItemTypes::DigitizerItem,"RAP");
        state = digitizerItem->addData(tRAP, parent);
        itemList << digitizerItem;
        itemList << new QStandardItem(digitizerItem->toolTip());
        this->appendRow(itemList);
        itemList.clear();
    }
    if (!tHpi.empty()){
        //Create a HPI digitizer item
        DigitizerTreeItem* digitizerItem = new DigitizerTreeItem(Data3DTreeModelItemTypes::DigitizerItem,"HPI");
        state = digitizerItem->addData(tHpi, parent);
        itemList << digitizerItem;
        itemList << new QStandardItem(digitizerItem->toolTip());
        this->appendRow(itemList);
        itemList.clear();
    }
    if (!tEeg.empty()){
        //Create a EEG digitizer item
        DigitizerTreeItem* digitizerItem = new DigitizerTreeItem(Data3DTreeModelItemTypes::DigitizerItem,"EEG/ECG");
        state = digitizerItem->addData(tEeg, parent);
        itemList << digitizerItem;
        itemList << new QStandardItem(digitizerItem->toolTip());
        this->appendRow(itemList);
        itemList.clear();
    }
    if (!tExtra.empty()){
        //Create a extra digitizer item
        DigitizerTreeItem* digitizerItem = new DigitizerTreeItem(Data3DTreeModelItemTypes::DigitizerItem,"Extra");
        state = digitizerItem->addData(tExtra, parent);
        itemList << digitizerItem;
        itemList << new QStandardItem(digitizerItem->toolTip());
        this->appendRow(itemList);
        itemList.clear();
    }
    return state;
}
void DigitizerSetTreeItem::addData(const FIFFLIB::FiffDigPointSet& tDigitizer, Qt3DCore::QEntity* parent)
{
    //Add data
    //parsing the digitizer List
    QList<FIFFLIB::FiffDigPoint> tNasion;
    QList<FIFFLIB::FiffDigPoint> tLAP;
    QList<FIFFLIB::FiffDigPoint> tRAP;
    QList<FIFFLIB::FiffDigPoint> tHpi;
    QList<FIFFLIB::FiffDigPoint> tEeg;
    QList<FIFFLIB::FiffDigPoint> tExtra;


    for(int i = 0; i < tDigitizer.size(); ++i){

        switch (tDigitizer[i].kind) {
        case FIFFV_POINT_CARDINAL:

            switch (tDigitizer[i].ident) {
                case FIFFV_POINT_LPA:
                    tLAP.append(tDigitizer[i]);
                break;

                case FIFFV_POINT_NASION:
                    tNasion.append(tDigitizer[i]);
                break;

                case FIFFV_POINT_RPA:
                    tRAP.append(tDigitizer[i]);
                break;

                default:
                break;
                            }
            break;

        case FIFFV_POINT_HPI:
            tHpi.append(tDigitizer[i]);
            break;

        case FIFFV_POINT_EEG:
            tEeg.append(tDigitizer[i]);
            break;

        case FIFFV_POINT_EXTRA:
            tExtra.append(tDigitizer[i]);
            break;

        default:
            break;
        }
    }

//    //Create items all new - A bit more inefficient but we do not run into the problem that the QEntity
//    //is delted with deleteLater() which could let to deletion after the new Qentity has been created
//    //Delete all childs first. We do this because we always want to start fresh with the newly added digitizer data.
//    if(this->hasChildren()) {
//        this->removeRows(0, this->rowCount());
//    }

//    QList<QStandardItem*> itemList;

//    if (!tLAP.empty()){
//        //Create a LAP digitizer item
//        DigitizerTreeItem* digitizerItem = new DigitizerTreeItem(parent, Data3DTreeModelItemTypes::DigitizerItem,"LAP");
//        digitizerItem->addData(tLAP);
//        itemList << digitizerItem;
//        itemList << new QStandardItem(digitizerItem->toolTip());
//        this->appendRow(itemList);
//        itemList.clear();
//    }
//    if (!tNasion.empty()){
//        //Create a Nasion digitizer item
//        DigitizerTreeItem* digitizerItem = new DigitizerTreeItem(parent, Data3DTreeModelItemTypes::DigitizerItem,"Nasion");
//         digitizerItem->addData(tNasion);
//        itemList << digitizerItem;
//        itemList << new QStandardItem(digitizerItem->toolTip());
//        this->appendRow(itemList);
//        itemList.clear();
//    }
//    if (!tRAP.empty()){
//        //Create a RAO digitizer item
//        DigitizerTreeItem* digitizerItem = new DigitizerTreeItem(parent, Data3DTreeModelItemTypes::DigitizerItem,"RAP");
//        digitizerItem->addData(tRAP);
//        itemList << digitizerItem;
//        itemList << new QStandardItem(digitizerItem->toolTip());
//        this->appendRow(itemList);
//        itemList.clear();
//    }
//    if (!tHpi.empty()){
//        //Create a HPI digitizer item
//        DigitizerTreeItem* digitizerItem = new DigitizerTreeItem(parent, Data3DTreeModelItemTypes::DigitizerItem,"HPI");
//        digitizerItem->addData(tHpi);
//        itemList << digitizerItem;
//        itemList << new QStandardItem(digitizerItem->toolTip());
//        this->appendRow(itemList);
//        itemList.clear();
//    }
//    if (!tEeg.empty()){
//        //Create a EEG digitizer item
//        DigitizerTreeItem* digitizerItem = new DigitizerTreeItem(parent, Data3DTreeModelItemTypes::DigitizerItem,"EEG/ECG");
//        digitizerItem->addData(tEeg);
//        itemList << digitizerItem;
//        itemList << new QStandardItem(digitizerItem->toolTip());
//        this->appendRow(itemList);
//        itemList.clear();
//    }
//    if (!tExtra.empty()){
//        //Create a extra digitizer item
//        DigitizerTreeItem* digitizerItem = new DigitizerTreeItem(parent, Data3DTreeModelItemTypes::DigitizerItem,"Extra");
//        digitizerItem->addData(tExtra);
//        itemList << digitizerItem;
//        itemList << new QStandardItem(digitizerItem->toolTip());
//        this->appendRow(itemList);
//        itemList.clear();
//    }

    //Find exiting Digitizer Items and add data respectivley
    QList<QStandardItem*> itemList = this->findChildren(Data3DTreeModelItemTypes::DigitizerItem);
    bool bFoundNasionlItem = false;
    bool bFoundLAPItem = false;
    bool bFoundRAPItem = false;
    bool bFoundHPIItem = false;
    bool bFoundEEGItem = false;
    bool bFoundExtraItem = false;

    for(int i = 0; i < itemList.size(); ++i) {
        DigitizerTreeItem* item = dynamic_cast<DigitizerTreeItem*>(itemList.at(i));

        if(item->text() == "Nasion" && !tNasion.empty()) {
            item->addData(tNasion, 0.002f, Qt::yellow);
            bFoundNasionlItem = true;
        }

        if(item->text() == "LAP" && !tLAP.empty()) {
            item->addData(tLAP, 0.002f, Qt::green);
            bFoundLAPItem = true;
        }

        if(item->text() == "RAP" && !tRAP.empty()) {
            item->addData(tRAP, 0.002f, Qt::magenta);
            bFoundRAPItem = true;
        }

        if(item->text() == "HPI" && !tHpi.empty()) {
            item->addData(tHpi, 0.001f, Qt::red);
            bFoundHPIItem = true;
        }

        if(item->text() == "EEG/ECG" && !tEeg.empty()) {
            item->addData(tEeg, 0.001f, Qt::cyan);
            bFoundEEGItem = true;
        }

        if(item->text() == "Extra" && !tExtra.empty()) {
            item->addData(tExtra, 0.001f, Qt::magenta);
            bFoundExtraItem = true;
        }
    }

    //If not existent yet create here
    if (!bFoundNasionlItem && !tNasion.empty()){
        //Create a cardinal digitizer item
        QList<QStandardItem*> itemListCardinal;
        DigitizerTreeItem* digitizerItem = new DigitizerTreeItem(parent, Data3DTreeModelItemTypes::DigitizerItem,"Nasion");
        digitizerItem->addData(tNasion, 0.002f, Qt::yellow);
        itemListCardinal << digitizerItem;
        itemListCardinal << new QStandardItem(digitizerItem->toolTip());
        this->appendRow(itemListCardinal);
    }

    if (!bFoundLAPItem && !tLAP.empty()){
        //Create a cardinal digitizer item
        QList<QStandardItem*> itemListCardinal;
        DigitizerTreeItem* digitizerItem = new DigitizerTreeItem(parent, Data3DTreeModelItemTypes::DigitizerItem,"LAP");
        digitizerItem->addData(tLAP, 0.002f, Qt::green);
        itemListCardinal << digitizerItem;
        itemListCardinal << new QStandardItem(digitizerItem->toolTip());
        this->appendRow(itemListCardinal);
    }

    if (!bFoundRAPItem && !tRAP.empty()){
        //Create a cardinal digitizer item
        QList<QStandardItem*> itemListCardinal;
        DigitizerTreeItem* digitizerItem = new DigitizerTreeItem(parent, Data3DTreeModelItemTypes::DigitizerItem,"RAP");
        digitizerItem->addData(tRAP, 0.002f, Qt::magenta);
        itemListCardinal << digitizerItem;
        itemListCardinal << new QStandardItem(digitizerItem->toolTip());
        this->appendRow(itemListCardinal);
    }

    if (!bFoundHPIItem && !tHpi.empty()){
        //Create a hpi digitizer item
        QList<QStandardItem*> itemListHPI;
        DigitizerTreeItem* digitizerItem = new DigitizerTreeItem(parent, Data3DTreeModelItemTypes::DigitizerItem,"HPI");
        digitizerItem->addData(tHpi, 0.001f, Qt::red);
        itemListHPI << digitizerItem;
        itemListHPI << new QStandardItem(digitizerItem->toolTip());
        this->appendRow(itemListHPI);
    }

    if (!bFoundEEGItem && !tEeg.empty()){
        //Create a eeg ecg digitizer item
        QList<QStandardItem*> itemListEEG;
        DigitizerTreeItem* digitizerItem = new DigitizerTreeItem(parent, Data3DTreeModelItemTypes::DigitizerItem,"EEG/ECG");
        digitizerItem->addData(tEeg, 0.001f, Qt::cyan);
        itemListEEG << digitizerItem;
        itemListEEG << new QStandardItem(digitizerItem->toolTip());
        this->appendRow(itemListEEG);
    }

    if (!bFoundExtraItem && !tExtra.empty()){
        //Create a extra digitizer item
        QList<QStandardItem*> itemListExtra;
        DigitizerTreeItem* digitizerItem = new DigitizerTreeItem(parent, Data3DTreeModelItemTypes::DigitizerItem,"Extra");
        digitizerItem->addData(tExtra, 0.001f, Qt::magenta);
        itemListExtra << digitizerItem;
        itemListExtra << new QStandardItem(digitizerItem->toolTip());
        this->appendRow(itemListExtra);
    }
}