static int TranslationComparator(const void* left, const void* right) { const Translation* leftTranslation = *(const Translation**)left; const Translation* rightTranslation = *(const Translation**)right; BLanguage* language; BString leftName; if (BLocaleRoster::Default()->GetLanguage(leftTranslation->languageCode, &language) == B_OK) { language->GetName(leftName); delete language; } else leftName = leftTranslation->languageCode; BString rightName; if (BLocaleRoster::Default()->GetLanguage(rightTranslation->languageCode, &language) == B_OK) { language->GetName(rightName); delete language; } else rightName = rightTranslation->languageCode; BCollator collator; BLocale::Default()->GetCollator(&collator); return collator.Compare(leftName.String(), rightName.String()); }
int main(int argc, char **argv) { // Parse command line arguments bool ignorePunctuation = false; char *addon = NULL; BCollator *collator = NULL; while ((++argv)[0]) { if (argv[0][0] == '-') { if (!strcmp(argv[0], "-i")) ignorePunctuation = true; else if (!strcmp(argv[0], "--help")) usage(); } else { // this will be the add-on to be loaded addon = argv[0]; } } // load the collator add-on if necessary if (addon != NULL) { image_id image = load_add_on(addon); if (image < B_OK) fprintf(stderr, "could not load add-on at \"%s\": %s.\n", addon, strerror(image)); BCollatorAddOn *(*instantiate)(void); if (get_image_symbol(image, "instantiate_collator", B_SYMBOL_TYPE_TEXT, (void **)&instantiate) == B_OK) { BCollatorAddOn *collatorAddOn = instantiate(); if (collatorAddOn != NULL) collator = new BCollator(collatorAddOn, B_COLLATE_PRIMARY, true); } else if (image >= B_OK) { fprintf(stderr, "could not find instantiate_collator() function in add-on!\n"); unload_add_on(image); } } if (collator == NULL) { collator = be_locale->Collator(); addon = (char*)"default"; } // test key creation speed collator->SetIgnorePunctuation(ignorePunctuation); printf("%s:\n", addon); test(collator, "primary: ", B_COLLATE_PRIMARY); test(collator, "secondary: ", B_COLLATE_SECONDARY); test(collator, "tertiary: ", B_COLLATE_TERTIARY); test(collator, "quaternary:", B_COLLATE_QUATERNARY); test(collator, "identical: ", B_COLLATE_IDENTICAL); return 0; }
static int compare_void_list_items(const void* _a, const void* _b) { static BCollator collator; LanguageItem* a = *(LanguageItem**)_a; LanguageItem* b = *(LanguageItem**)_b; return collator.Compare(a->Text(), b->Text()); }
static int compare_void_menu_items(const void* _a, const void* _b) { static BCollator collator; BMenuItem* a = *(BMenuItem**)_a; BMenuItem* b = *(BMenuItem**)_b; return collator.Compare(a->Label(), b->Label()); }
static int compare_typed_list_items(const BListItem* _a, const BListItem* _b) { static BCollator collator; LanguageListItem* a = (LanguageListItem*)_a; LanguageListItem* b = (LanguageListItem*)_b; return collator.Compare(a->Text(), b->Text()); }
void TExpandoMenuBar::AddTeam(BList* team, BBitmap* icon, char* name, char* signature) { int32 iconSize = static_cast<TBarApp*>(be_app)->IconSize(); desk_settings* settings = static_cast<TBarApp*>(be_app)->Settings(); float itemWidth = -1.0f; if (fVertical) itemWidth = fBarView->Bounds().Width(); else { itemWidth = iconSize; if (!settings->hideLabels) itemWidth += gMinimumWindowWidth - kMinimumIconSize; else itemWidth += kIconPadding * 2; } float itemHeight = -1.0f; TTeamMenuItem* item = new TTeamMenuItem(team, icon, name, signature, itemWidth, itemHeight); if (settings->trackerAlwaysFirst && strcasecmp(signature, kTrackerSignature) == 0) { AddItem(item, 0); } else if (settings->sortRunningApps) { TTeamMenuItem* teamItem = dynamic_cast<TTeamMenuItem*>(ItemAt(0)); int32 firstApp = 0; // if Tracker should always be the first item, we need to skip it // when sorting in the current item if (settings->trackerAlwaysFirst && teamItem != NULL && strcasecmp(teamItem->Signature(), kTrackerSignature) == 0) { firstApp++; } BCollator collator; BLocale::Default()->GetCollator(&collator); int32 i = firstApp; int32 itemCount = CountItems(); while (i < itemCount) { teamItem = dynamic_cast<TTeamMenuItem*>(ItemAt(i)); if (teamItem != NULL && collator.Compare(teamItem->Label(), name) > 0) { AddItem(item, i); break; } i++; } // was the item added to the list yet? if (i == itemCount) AddItem(item); } else AddItem(item); if (fVertical && settings->superExpando && settings->expandNewTeams) item->ToggleExpandState(false); SizeWindow(1); Window()->UpdateIfNeeded(); }