Exemple #1
0
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;
}
Exemple #2
0
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);
}
Exemple #3
0
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;
	}

}