void LocaleWindow::_EnableDisableLanguages() { DisableUpdates(); for (int32 i = 0; i < fLanguageListView->FullListCountItems(); i++) { LanguageListItem* item = static_cast<LanguageListItem*>( fLanguageListView->FullListItemAt(i)); bool enable = fPreferredListView->ItemForLanguageID(item->ID()) == NULL; if (item->IsEnabled() != enable) { item->SetEnabled(enable); int32 visibleIndex = fLanguageListView->IndexOf(item); if (visibleIndex >= 0) { if (!enable) fLanguageListView->Deselect(visibleIndex); fLanguageListView->InvalidateItem(visibleIndex); } } } SettingsChanged(); EnableUpdates(); }
LanguageListItem* LanguageListView::ItemForLanguageID(const char* id, int32* _index) const { for (int32 index = 0; index < FullListCountItems(); index++) { LanguageListItem* item = static_cast<LanguageListItem*>(FullListItemAt(index)); if (item->ID() == id) { if (_index != NULL) *_index = index; return item; } } return NULL; }
void LocaleWindow::_PreferredLanguagesChanged() { BMessage preferredLanguages; int index = 0; while (index < fPreferredListView->FullListCountItems()) { // only include subitems: we can guess the superitem from them anyway LanguageListItem* item = static_cast<LanguageListItem*>( fPreferredListView->FullListItemAt(index)); if (item != NULL) preferredLanguages.AddString("language", item->ID()); index++; } MutableLocaleRoster::Default()->SetPreferredLanguages(&preferredLanguages); _EnableDisableLanguages(); }
void LocaleWindow::_PreferredLanguagesChanged() { BMessage update(kMsgSettingsChanged); int index = 0; while (index < fPreferredListView->FullListCountItems()) { // only include subitems: we can guess the superitem // from them anyway LanguageListItem* item = static_cast<LanguageListItem*>( fPreferredListView->FullListItemAt(index)); if (item != NULL) update.AddString("language", item->ID()); index++; } be_app_messenger.SendMessage(&update); _EnableDisableLanguages(); }
void LocaleWindow::MessageReceived(BMessage* message) { switch (message->what) { case kMsgDefaults: _Defaults(); break; case kMsgRevert: { _Revert(); fFormatView->Revert(); fConventionsListView->DeselectAll(); if (fInitialConventionsItem != NULL) { BListItem* superitem = fConventionsListView->Superitem(fInitialConventionsItem); if (superitem != NULL) superitem->SetExpanded(true); fConventionsListView->Select(fConventionsListView->IndexOf( fInitialConventionsItem)); fConventionsListView->ScrollToSelection(); } _SettingsReverted(); break; } case kMsgSettingsChanged: _SettingsChanged(); break; case kMsgLanguageDragged: { void* target = NULL; if (message->FindPointer("drop_target", &target) != B_OK || target != fPreferredListView) break; // Add from available languages to preferred languages int32 dropIndex; if (message->FindInt32("drop_index", &dropIndex) != B_OK) dropIndex = fPreferredListView->CountItems(); int32 index = 0; for (int32 i = 0; message->FindInt32("index", i, &index) == B_OK; i++) { LanguageListItem* item = static_cast<LanguageListItem*>( fLanguageListView->FullListItemAt(index)); _InsertPreferredLanguage(item, dropIndex++); } break; } case kMsgLanguageInvoked: { int32 index = 0; for (int32 i = 0; message->FindInt32("index", i, &index) == B_OK; i++) { LanguageListItem* item = static_cast<LanguageListItem*>( fLanguageListView->ItemAt(index)); _InsertPreferredLanguage(item); } break; } case kMsgPreferredLanguageDragged: { void* target = NULL; if (fPreferredListView->CountItems() == 1 || message->FindPointer("drop_target", &target) != B_OK) break; if (target == fPreferredListView) { // change ordering int32 dropIndex = message->FindInt32("drop_index"); int32 index = 0; if (message->FindInt32("index", &index) == B_OK && dropIndex != index) { BListItem* item = fPreferredListView->RemoveItem(index); if (dropIndex > index) index--; fPreferredListView->AddItem(item, dropIndex); _PreferredLanguagesChanged(); } break; } // supposed to fall through - remove item } case kMsgPreferredLanguageDeleted: case kMsgPreferredLanguageInvoked: { if (fPreferredListView->CountItems() == 1) break; // Remove from preferred languages int32 index = 0; if (message->FindInt32("index", &index) == B_OK) { delete fPreferredListView->RemoveItem(index); _PreferredLanguagesChanged(); if (message->what == kMsgPreferredLanguageDeleted) fPreferredListView->Select(index); } break; } case kMsgConventionsSelection: { // Country selection changed. // Get the new selected country from the ListView and send it to the // main app event handler. void* listView; if (message->FindPointer("source", &listView) != B_OK) break; BListView* conventionsList = static_cast<BListView*>(listView); if (conventionsList == NULL) break; LanguageListItem* item = static_cast<LanguageListItem*> (conventionsList->ItemAt(conventionsList->CurrentSelection())); if (item == NULL) break; BFormattingConventions conventions(item->ID()); MutableLocaleRoster::Default()->SetDefaultFormattingConventions( conventions); _SettingsChanged(); fFormatView->Refresh(); break; } case kMsgFilesystemTranslationChanged: { MutableLocaleRoster::Default()->SetFilesystemTranslationPreferred( fFilesystemTranslationCheckbox->Value()); BAlert* alert = new BAlert(B_TRANSLATE("Locale"), B_TRANSLATE("Deskbar and Tracker need to be restarted for this " "change to take effect. Would you like to restart them now?"), B_TRANSLATE("Cancel"), B_TRANSLATE("Restart"), NULL, B_WIDTH_FROM_WIDEST, B_IDEA_ALERT); alert->SetShortcut(0, B_ESCAPE); alert->Go(new BInvoker(new BMessage(kMsgRestartTrackerAndDeskbar), NULL, be_app)); break; } default: BWindow::MessageReceived(message); break; } }
void LocaleWindow::MessageReceived(BMessage* message) { switch (message->what) { case kMsgDefaults: _Defaults(); break; case kMsgRevert: be_app_messenger.SendMessage(message); _UpdatePreferredFromLocaleRoster(); break; case kMsgLanguageDragged: { void* target = NULL; if (message->FindPointer("drop_target", &target) != B_OK || target != fPreferredListView) break; // Add from available languages to preferred languages int32 dropIndex; if (message->FindInt32("drop_index", &dropIndex) != B_OK) dropIndex = fPreferredListView->CountItems(); int32 index = 0; for (int32 i = 0; message->FindInt32("index", i, &index) == B_OK; i++) { LanguageListItem* item = static_cast<LanguageListItem*>( fLanguageListView->FullListItemAt(index)); _InsertPreferredLanguage(item, dropIndex++); } break; } case kMsgLanguageInvoked: { int32 index = 0; for (int32 i = 0; message->FindInt32("index", i, &index) == B_OK; i++) { LanguageListItem* item = static_cast<LanguageListItem*>( fLanguageListView->ItemAt(index)); _InsertPreferredLanguage(item); } break; } case kMsgPreferredLanguageDragged: { void* target = NULL; if (fPreferredListView->CountItems() == 1 || message->FindPointer("drop_target", &target) != B_OK) break; if (target == fPreferredListView) { // change ordering int32 dropIndex = message->FindInt32("drop_index"); int32 index = 0; if (message->FindInt32("index", &index) == B_OK && dropIndex != index) { BListItem* item = fPreferredListView->RemoveItem(index); if (dropIndex > index) index--; fPreferredListView->AddItem(item, dropIndex); _PreferredLanguagesChanged(); } break; } // supposed to fall through - remove item } case kMsgPreferredLanguageDeleted: case kMsgPreferredLanguageInvoked: { if (fPreferredListView->CountItems() == 1) break; // Remove from preferred languages int32 index = 0; if (message->FindInt32("index", &index) == B_OK) { delete fPreferredListView->RemoveItem(index); _PreferredLanguagesChanged(); if (message->what == kMsgPreferredLanguageDeleted) fPreferredListView->Select(index); } break; } case kMsgCountrySelection: { // Country selection changed. // Get the new selected country from the ListView and send it to the // main app event handler. void* listView; if (message->FindPointer("source", &listView) != B_OK) break; BListView* countryList = static_cast<BListView*>(listView); LanguageListItem* item = static_cast<LanguageListItem*> (countryList->ItemAt(countryList->CurrentSelection())); BMessage newMessage(kMsgSettingsChanged); newMessage.AddString("country", item->ID()); be_app_messenger.SendMessage(&newMessage); SettingsChanged(); BCountry* country = new BCountry(item->ID()); fFormatView->SetCountry(country); break; } default: BWindow::MessageReceived(message); break; } }