static void _DoSwap(BList& list, int32 firstIndex, int32 secondIndex, BList* firstItems, BList* secondItems) { BListItem* item = (BListItem*)list.ItemAt(firstIndex); list.SwapItems(firstIndex, secondIndex); list.RemoveItems(secondIndex + 1, secondItems->CountItems()); list.RemoveItems(firstIndex + 1, firstItems->CountItems()); list.AddList(secondItems, firstIndex + 1); int32 newIndex = list.IndexOf(item); if (newIndex + 1 < list.CountItems()) list.AddList(firstItems, newIndex + 1); else list.AddList(firstItems); }
void Hall::WriteScores(void) { BFile F; int i; struct score s; entry_ref er; BList *L; L = new BList(NUMBER); L->AddList(List1); L->AddList(List2); L->AddList(List3); L->AddList(List4); L->AddList(List5); //fprintf(stderr, "WriteScores called\n"); if (_changed && REGISTERED) { //fprintf(stderr, "Setting F\n"); //get_ref_for_path("/boot/home/config/settings/BShisen.Scores", &er); if (F.SetTo(path->Path(),//&er, B_WRITE_ONLY | B_ERASE_FILE | B_CREATE_FILE) == B_NO_ERROR) { for ( i = 0; i < L->CountItems(); i++) { HSList *h; memset(&s, 0, sizeof(struct score)); h = (HSList *)L->ItemAt(i); s.gameID = h->GetGameID(); s.gameTime = h->GetGameTime(); s.gameTiles = h->GetNumberTiles(); s.absTime = h->GetTimeOfGame(); memcpy(s.Name, h->GetName(), strlen(h->GetName()) + 1); F.Write(&s, sizeof (struct score)); } _changed = false; } //else fprintf(stderr, "Couldn't write to high scores file\n"); } //fprintf(stderr, "WriteScores exiting\n"); delete L; }
void HTGTimeLineView::addUnhandledTweets() { if(unhandledList->IsEmpty()) return; BList *newList = new BList(); newList->AddList(unhandledList); unhandledList->MakeEmpty(); HTGTweetItem *currentItem; while(!listView->IsEmpty()) { currentItem = (HTGTweetItem *)listView->FirstItem(); listView->RemoveItem(currentItem); if(newList->CountItems() < 30) {//Only allow 30 tweets to be displayed at once... for now. newList->AddItem(currentItem); currentItem->ClearView(); //No need to keep everything in memory //if the view is at the bottom of the scrollbar (invisible) } else delete currentItem; } /*Sort tweets by date*/ newList->SortItems(*HTGTweetItem::sortByDateFunc); /*Add our new list*/ listView->AddList(newList); /*Clean up*/ unhandledList->MakeEmpty(); }
//! newExtensionsList contains all the entries (char*) which are to be added. status_t merge_extensions(BMimeType& type, const BList& newExtensionsList, const char* removeExtension) { BMessage extensions; status_t status = type.GetFileExtensions(&extensions); if (status < B_OK) return status; // replace the entry, and remove any equivalent entries BList mergedList; mergedList.AddList(&newExtensionsList); int32 originalCount = mergedList.CountItems(); const char* extension; for (int32 i = 0; extensions.FindString("extensions", i, &extension) == B_OK; i++) { for (int32 j = originalCount; j-- > 0;) { if (!strcmp((const char*)mergedList.ItemAt(j), extension)) { // Do not add this old item again, since it's already // there. mergedList.RemoveItem(j); originalCount--; } } // The item will be added behind "originalCount", so we cannot // remove it accidentally in the next iterations, it's is added // for good. if (removeExtension == NULL || strcmp(removeExtension, extension)) mergedList.AddItem((void *)extension); } mergedList.SortItems(compare_extensions); // Copy them to a new message (their memory is still part of the // original BMessage) BMessage newExtensions; for (int32 i = 0; i < mergedList.CountItems(); i++) { newExtensions.AddString("extensions", (const char*)mergedList.ItemAt(i)); } return type.SetFileExtensions(&newExtensions); }