| 
				
				
					
				
				
				 | 
			
			 | 
			@@ -348,54 +348,43 @@ struct FramesWidget : ModuleWidget { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					Frames* module = dynamic_cast<Frames*>(this->module); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					assert(module); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					struct FramesChannelSettingsItem : MenuItem { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
						Frames* module; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
						uint8_t channel; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
						Menu* createChildMenu() override { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
							Menu* menu = new Menu(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
							menu->addChild(createMenuLabel("Interpolation curve")); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
							static const std::vector<std::string> curveLabels = { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
								"Step", | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
								"Linear", | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
								"Accelerating", | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
								"Decelerating", | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
								"Departure/arrival", | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
								"Bouncing", | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
							}; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
							for (int i = 0; i < (int) curveLabels.size(); i++) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
								menu->addChild(createCheckMenuItem(curveLabels[i], | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
									[=]() {return module->keyframer.mutable_settings(channel)->easing_curve == i;}, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
									[=]() {module->keyframer.mutable_settings(channel)->easing_curve = (frames::EasingCurve) i;} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
								)); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
							} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
							menu->addChild(new MenuSeparator); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
							menu->addChild(createMenuLabel("Response curve")); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					menu->addChild(new MenuSeparator); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					menu->addChild(createMenuLabel("Channel settings")); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
							menu->addChild(createCheckMenuItem("Linear", | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
								[=]() {return module->keyframer.mutable_settings(channel)->response == 0;}, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
								[=]() {module->keyframer.mutable_settings(channel)->response = 0;} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
							)); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
							menu->addChild(createCheckMenuItem("Exponential", | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
								[=]() {return module->keyframer.mutable_settings(channel)->response == 255;}, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
								[=]() {module->keyframer.mutable_settings(channel)->response = 255;} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
							)); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					for (int c = 0; c < 4; c++) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
						menu->addChild(createSubmenuItem(string::f("Channel %d", c + 1), | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
							[=](Menu* menu) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
								menu->addChild(createMenuLabel("Interpolation curve")); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
								static const std::vector<std::string> curveLabels = { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
									"Step", | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
									"Linear", | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
									"Accelerating", | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
									"Decelerating", | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
									"Departure/arrival", | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
									"Bouncing", | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
								}; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
								for (int i = 0; i < (int) curveLabels.size(); i++) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
									menu->addChild(createCheckMenuItem(curveLabels[i], | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
										[=]() {return module->keyframer.mutable_settings(c)->easing_curve == i;}, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
										[=]() {module->keyframer.mutable_settings(c)->easing_curve = (frames::EasingCurve) i;} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
									)); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
								} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
							return menu; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
						} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					}; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
								menu->addChild(new MenuSeparator); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					menu->addChild(new MenuSeparator); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					menu->addChild(createMenuLabel("Channel settings")); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
								menu->addChild(createMenuLabel("Response curve")); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					for (int i = 0; i < 4; i++) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
						FramesChannelSettingsItem* item = createMenuItem<FramesChannelSettingsItem>(string::f("Channel %d", i + 1)); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
						item->module = module; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
						item->channel = i; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
						menu->addChild(item); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
								menu->addChild(createCheckMenuItem("Linear", | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
									[=]() {return module->keyframer.mutable_settings(c)->response == 0;}, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
									[=]() {module->keyframer.mutable_settings(c)->response = 0;} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
								)); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
								menu->addChild(createCheckMenuItem("Exponential", | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
									[=]() {return module->keyframer.mutable_settings(c)->response == 255;}, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
									[=]() {module->keyframer.mutable_settings(c)->response = 255;} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
								)); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
							} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
						)); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					menu->addChild(createMenuItem("Clear keyframes", "", | 
		
		
	
	
		
			
				| 
				
					
				
				
				
				 | 
			
			 | 
			
  |