// 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()); }
/** * - 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(); }
/** * - 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(); }
// 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; }
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; */ }