public static void updateUIFloatEditControl(this PartModule module, string fieldName, float min, float max, float incLarge, float incSmall, float incSlide, bool forceUpdate, float forceVal) { UI_FloatEdit widget = null; if (HighLogic.LoadedSceneIsEditor) { widget = (UI_FloatEdit)module.Fields[fieldName].uiControlEditor; } else if (HighLogic.LoadedSceneIsFlight) { widget = (UI_FloatEdit)module.Fields[fieldName].uiControlFlight; } else { return; } if (widget == null) { return; } widget.minValue = min; widget.maxValue = max; widget.incrementLarge = incLarge; widget.incrementSmall = incSmall; widget.incrementSlide = incSlide; if (forceUpdate && widget.partActionItem != null) { UIPartActionFloatEdit ctr = (UIPartActionFloatEdit)widget.partActionItem; var t = widget.onFieldChanged;//temporarily remove the callback widget.onFieldChanged = null; ctr.incSmall.onToggle.RemoveAllListeners(); ctr.incLarge.onToggle.RemoveAllListeners(); ctr.decSmall.onToggle.RemoveAllListeners(); ctr.decLarge.onToggle.RemoveAllListeners(); ctr.slider.onValueChanged.RemoveAllListeners(); ctr.Setup(ctr.Window, module.part, module, HighLogic.LoadedSceneIsEditor ? UI_Scene.Editor : UI_Scene.Flight, widget, module.Fields[fieldName]); widget.onFieldChanged = t;//re-seat callback } }
public static void updateUIFloatEditControl(this PartModule module, string fieldName, float newValue) { UI_FloatEdit widget = null; if (HighLogic.LoadedSceneIsEditor) { widget = (UI_FloatEdit)module.Fields[fieldName].uiControlEditor; } else if (HighLogic.LoadedSceneIsFlight) { widget = (UI_FloatEdit)module.Fields[fieldName].uiControlFlight; } else { return; } if (widget == null) { return; } BaseField field = module.Fields[fieldName]; field.SetValue(newValue, field.host); if (widget.partActionItem != null)//force widget re-setup for changed values; this will update the GUI value and slider positions/internal cached data { UIPartActionFloatEdit ctr = (UIPartActionFloatEdit)widget.partActionItem; var t = widget.onFieldChanged;//temporarily remove the callback; we don't need an event fired when -we- are the ones editing the value... widget.onFieldChanged = null; ctr.incSmall.onToggle.RemoveAllListeners(); ctr.incLarge.onToggle.RemoveAllListeners(); ctr.decSmall.onToggle.RemoveAllListeners(); ctr.decLarge.onToggle.RemoveAllListeners(); ctr.slider.onValueChanged.RemoveAllListeners(); ctr.Setup(ctr.Window, module.part, module, HighLogic.LoadedSceneIsEditor ? UI_Scene.Editor : UI_Scene.Flight, widget, module.Fields[fieldName]); widget.onFieldChanged = t;//re-seat callback } }