bool SettingsMenuImpl::AddOptionsItem(OptionsSetting* setting) { // create the submenu BMenu* menu = new(std::nothrow) BMenu(setting->Name()); if (menu == NULL) return false; // create the menu item OptionsMenuItem* item = new(std::nothrow) OptionsMenuItem(setting, menu); if (item == NULL) { delete menu; return false; } ObjectDeleter<OptionsMenuItem> itemDeleter(item); // create sub menu items for the options int32 count = setting->CountOptions(); for (int32 i = 0; i < count; i++) { SettingsOption* option = setting->OptionAt(i); BMenuItem* optionItem = new(std::nothrow) OptionMenuItem(option); if (optionItem == NULL || !menu->AddItem(optionItem)) { delete optionItem; return false; } } if (!AddItem(item)) return false; itemDeleter.Detach(); return true; }
void BreakConditionConfigWindow::_UpdateStopImageState() { bool previousStop = fStopOnLoadEnabled; bool previousCustomImages = fUseCustomImages && fStopOnLoadEnabled; fStopOnLoadEnabled = fTeam->StopOnImageLoad(); fStopOnImageLoad->SetValue( fStopOnLoadEnabled ? B_CONTROL_ON : B_CONTROL_OFF); fUseCustomImages = fTeam->StopImageNameListEnabled(); fStopImageConstraints->Menu() ->ItemAt(fTeam->StopImageNameListEnabled() ? 1 : 0)->SetMarked(true); fStopImageNames->MakeEmpty(); const BStringList& imageNames = fTeam->StopImageNames(); for (int32 i = 0; i < imageNames.CountStrings(); i++) { BStringItem* item = new(std::nothrow) BStringItem( imageNames.StringAt(i)); if (item == NULL) return; item->SetEnabled(fUseCustomImages); ObjectDeleter<BStringItem> itemDeleter(item); if (!fStopImageNames->AddItem(item)) return; itemDeleter.Detach(); } _UpdateStopImageButtons(previousStop, previousCustomImages); }
void BreakConditionConfigWindow::MessageReceived(BMessage* message) { switch (message->what) { case MSG_STOP_ON_THROWN_EXCEPTION_CHANGED: { _UpdateThrownBreakpoints(fExceptionThrown->Value() == B_CONTROL_ON); break; } case MSG_STOP_ON_CAUGHT_EXCEPTION_CHANGED: { break; } case MSG_SET_STOP_FOR_ALL_IMAGES: { fListener->SetStopOnImageLoadRequested( fStopOnImageLoad->Value() == B_CONTROL_ON, false); break; } case MSG_SET_STOP_FOR_CUSTOM_IMAGES: { fListener->SetStopOnImageLoadRequested( fStopOnImageLoad->Value() == B_CONTROL_ON, true); break; } case MSG_IMAGE_NAME_SELECTION_CHANGED: { if (!fUseCustomImages) break; fRemoveImageNameButton->SetEnabled( fStopImageNames->CurrentSelection() >= 0); break; } case MSG_IMAGE_NAME_INPUT_CHANGED: { BString imageName(fStopImageNameInput->Text()); imageName.Trim(); fAddImageNameButton->SetEnabled(!imageName.IsEmpty()); break; } case MSG_STOP_ON_IMAGE_LOAD: { fListener->SetStopOnImageLoadRequested( fStopOnImageLoad->Value() == B_CONTROL_ON, fUseCustomImages); break; } case MSG_STOP_IMAGE_SETTINGS_CHANGED: { _UpdateStopImageState(); break; } case MSG_ADD_IMAGE_NAME: { BString imageName(fStopImageNameInput->Text()); imageName.Trim(); AutoLocker< ::Team> teamLocker(fTeam); if (fTeam->StopImageNames().HasString(imageName)) break; fStopImageNameInput->SetText(""); fListener->AddStopImageNameRequested(imageName.String()); break; } case MSG_STOP_IMAGE_NAME_ADDED: { const char* imageName; if (message->FindString("name", &imageName) != B_OK) break; BStringItem* item = new(std::nothrow) BStringItem(imageName); if (item == NULL) break; ObjectDeleter<BStringItem> itemDeleter(item); if (!fStopImageNames->AddItem(item)) { break; } itemDeleter.Detach(); fStopImageNames->SortItems(SortStringItems); break; } case MSG_REMOVE_IMAGE_NAME: { BStringItem* item; int32 selectedIndex; AutoLocker< ::Team> teamLocker(fTeam); int32 i = 0; while ((selectedIndex = fStopImageNames->CurrentSelection(i++)) >= 0) { item = (BStringItem*)fStopImageNames->ItemAt(selectedIndex); fListener->RemoveStopImageNameRequested(item->Text()); } break; } case MSG_STOP_IMAGE_NAME_REMOVED: { const char* imageName; if (message->FindString("name", &imageName) != B_OK) break; for (int32 i = 0; i < fStopImageNames->CountItems(); i++) { BStringItem* item = (BStringItem*)fStopImageNames->ItemAt(i); if (strcmp(item->Text(), imageName) == 0) { fStopImageNames->RemoveItem(i); delete item; } } break; } default: BWindow::MessageReceived(message); break; } }