Example #1
0
bool add_noise_dialog::respond (sxsdk::dialog_interface &d, sxsdk::dialog_item_class &item, int action, void *)
{
	if(action == sx::dialog_item::changing_action) return false;

	bool update = auto_preview;

	switch(item.get_id())
	{
	case bAuto_preview_id:
		if(!item.get_bool()) {
			update = false;
			break;
		}
	// TODO Check fallthrough or break.
	fallthrough; case bRedraw_preview_id:
		d.get_dialog_item(pPreview_mode_id).set_selection(After_effect);
	// TODO Check fallthrough or break.
	fallthrough; case pPreview_mode_id:
		update = true;
		break;
	case fOpacity_id:
	case fOpacity_A_id:
		if(item.get_float() > 1.0f)	item.set_float(1.0f);
	// TODO Check fallthrough or break.
	fallthrough; case fZ_Effect_id:
	case fOpacity_R_id:
	case fOpacity_G_id:
	case fOpacity_B_id:
		if(item.get_float() < 0.0f)	item.set_float(0.0f);
	// TODO Check fallthrough or break.
	fallthrough; default:
		if(auto_preview)	d.get_dialog_item(pPreview_mode_id).set_selection(After_effect);
	}

	save_dialog_data(d);
	if((update || auto_preview) && noise_preview) {
		try {
			if (!noise_preview->update_preview_image(preview_mode)) {
				preview_mode = Before_effect;
			}
		} catch (...) {
			shade.show_message_box(shade.gettext("error_out_of_memory"), false);
			preview_mode = Before_effect;
		}
		d.get_dialog_item(pPreview_mode_id).set_selection(preview_mode);
	}

	return false;
}