// insert item notification handler
// + add items, for chunked read
void JsonDbSortingListModelPrivate::addItem(const QVariantMap &newItem, int partitionIndex)
{
    Q_Q(JsonDbSortingListModel);
    QVariantMap item = newItem;
    if (isCallable)
        generateCustomData(item);
    const QString &uuid = item.value(QLatin1String("_uuid")).toString();
    // ignore duplicates.
    if (objects.contains(uuid))
        return;
    SortingKey key(partitionIndex, item, ascendingOrders, orderPaths);
    QMap<SortingKey, QString>::const_iterator begin = objectUuids.constBegin();
    QMap<SortingKey, QString>::const_iterator end = objectUuids.constEnd();
    QMap<SortingKey, QString>::const_iterator i = objectUuids.upperBound(key);
    int index = iterator_position(begin, end, i);
    if (limit > 0  &&  objectUuids.count() == limit) {
        if (index < limit) {
            // when we hit the limit make space for a single item
            removeLastItem();
        } else {
            // beyond the last element, ignore the object.
            return;
        }
    }
    q->beginInsertRows(parent, index, index);
    objects.insert(uuid, item);
    objectUuids.insert(key, uuid);
    objectSortValues.insert(uuid, key);
    if (limit > 0  &&  objectUuids.count() == limit) {
        overflow = true;
    }
    q->endInsertRows();
    emit q->rowCountChanged(objects.count());
}
Example #2
0
/**
 * 	-	close dialog and reset setting
 *
*/
void Popup::on_btnPopClose_clicked()
{
    if(isEditItem){
        isEditItem = false;
        this->close();
        return;
    }

    emit removeLastItem();

    ui->lEObject->setText("");

    for(int i = 0; i < widgetList.count(); i++)
        widgetList[i]->setText("");

    this->close();
}
Example #3
0
/**
 * 	-	save button, set init setting
 *
*/
void Popup::on_btnPopSave_clicked()
{
    if(isEditItem){
        isEditItem = false;
        this->close();
        return;
    }

    AnnotatorLib::Commands::NewObject * nO = new AnnotatorLib::Commands::NewObject(ui->lEObject->text().toStdString(), session);
    session->execute(nO);
    float width = pointLR.x() - pointUL.x();
    float height = pointLR.y()- pointUL.y();

    float x = pointUL.x() + width / 2;
    float y = pointUL.y() + height / 2;

    AnnotatorLib::Frame *frame = session->getFrame(frameNr);

    AnnotatorLib::Commands::NewAnnotation * nA = new AnnotatorLib::Commands::NewAnnotation(nO->getObject(), frame, x, y
                                      , width/2, height/2, this->session, false);

    session->execute(nA);

    Annotator::Plugin * plugin = Annotator::PluginLoader::getInstance().getCurrent();
    plugin->setObject(nO->getObject());
    plugin->setLastAnnotation(nA->getAnnotation());

    //get the start frame number of item.
    startFr = frameNr;
    endFr = -1;

    //get the start frame number of the currently sequence.
    startFrame = frameNr;
    endFrame = -1; //-1 means no END Frame was defined


    //save item in RAM
    putInRAM(ui->lE_UL->text(), ui->lE_LR->text(),ItemID.toInt(), ItemColor.name());

    emit saveIDsettings();

    emit removeLastItem();

    this->close();
}
Example #4
0
// insert new item into the list
int insertListItem(List *list, double value, int i, int j, int isFull, int inserted){
    ListItem *item;
    ListItem *nextItem;
    ListItem *newFirst;
    int searchPlace = 1;
    double v;

    item = list->firstItem;

    // the list is empty
    if(item == NULL){
        list->firstItem = createListItem(value, i, j);
        lastBest = value;
        inserted--;
        return inserted;
    }

    // this listItem should be the first?
    if(value < item->value){
        newFirst = createListItem(value, i, j);
        newFirst->nextItem = item;
        list->firstItem = newFirst;
         if(isFull){
            removeLastItem(list->firstItem);
        }
        inserted--;
        return inserted;
    }

    /* search the right place */
    while(searchPlace){
        // insert in the same list item
        v = item->value;

        if(item->value == value){
             insertValues(item, i, j);
             return inserted;
        }
        nextItem = item->nextItem;

        // there is no next item
        if(nextItem == NULL){
            item->nextItem = createListItem(value, i, j);
            lastBest = value;
            inserted--;
            return inserted;
        }
        // should we add a new list item between two existing items?
        if(nextItem->value > value){
            item->nextItem = createListItem(value, i, j);
            item->nextItem->nextItem = nextItem;
            if(isFull){
                removeLastItem(list->firstItem);
            }
            inserted--;
            return inserted;
        }
        item = item->nextItem;
    }
    return 0;
}
Example #5
0
bool HighScoresList::insert(std::string name, int score)
{
    if (name.compare("") == 0)
    {
        return false;
    }

    if (head_ == NULL) //This is the first item
    {
        head_ = new Item;
        head_->name_ = name;
        head_->score_ = score;
        head_->next_ = NULL;
        size_ = 1;
        return true;
    }

    Item* temp = new Item;
    temp->name_ = name;
    temp->score_ = score;
    temp->next_ = NULL;

    Item* last = head_;
    Item* previous;
    if (last->score_ <= temp->score_)
    {
        temp->next_ = head_;
        head_ = temp;
        return true;
    }

    last = last->next_;
    previous = head_;
    bool found = false;
    while (last != NULL)
    {
        if (last->score_ <= temp->score_)
        {
            previous->next_ = temp;
            temp->next_ = last;
            found = true;
            break;
        }

        previous = previous->next_;
        last = last->next_;
    }//End while

    bool lastItem = false;
    if (!found) {
        previous->next_ = temp;
        lastItem = true;
    }

    size_++;

    if (size_ > 10)
    {
        removeLastItem();
        if (lastItem)
            return false;
    }
    return true;
    /*
    std::cout << "Moving through list" << std::endl;
    Item* conductor = head_;
    Item* previous = head_;
    while(conductor != NULL)
    {
        if(conductor->score_ >= score)
        {
            std::cout << "Score: " << conductor->score_ << std::endl;
            if (conductor != head_)
                previous = previous->next_;
            conductor = conductor->next_;
        } else {
            Item* newNode = new Item;
            newNode->name_ = name;
            newNode->score_ = score;
            newNode->next_ = conductor;
            previous->next_ = newNode;
            if (size_ == 10)
                removeLastItem();
            else
                size_++;
            return true;
        }
    }

    std::cout << "Adding at end of list" << std::endl;
    if (size_ < 10)
    {
        Item* newNode = new Item;
        newNode->name_ = name;
        newNode->score_ = score;
        newNode->next_ = NULL;
        previous->next_ = newNode;
        size_++;
        std::cout << "Inserted " << previous->score_ << std::endl;
        return true;
    }
    std::cout << "Did not insert" << std::endl;
    return false; */
}