Base CreateControls(Control.Base subject, int dock_idx, String name, int x, int y) { Control.GroupBox gb = new Control.GroupBox(this); gb.SetBounds(x, y, 200, 150); gb.Text = name; Control.Label l_width = new Control.Label(gb); l_width.SetSize(35, 15); l_width.Text = "Width:"; Control.HorizontalSlider width = new HorizontalSlider(gb); width.Name = "Width"; width.UserData.Add("test", subject); width.Min = 50; width.Max = 350; width.Value = 100; width.SetSize(55, 15); width.ValueChanged += WidthChanged; Align.PlaceRightBottom(width, l_width); Control.Label l_height = new Control.Label(gb); l_height.SetSize(35, 15); l_height.Text = "Height:"; Align.PlaceRightBottom(l_height, width, 10); Control.HorizontalSlider height = new Control.HorizontalSlider(gb); height.Name = "Height"; height.UserData.Add("test", subject); height.Min = 50; height.Max = 350; height.Value = 100; height.SetSize(55, 15); height.ValueChanged += HeightChanged; Align.PlaceRightBottom(height, l_height); Control.RadioButtonGroup dock = new RadioButtonGroup(gb, "Dock"); dock.UserData.Add("test", subject); // store control that we are controlling dock.AddOption("Left"); dock.AddOption("Top"); dock.AddOption("Right"); dock.AddOption("Bottom"); dock.AddOption("Fill"); dock.SetSelection(dock_idx); Align.PlaceDownLeft(dock, l_width, 5); //dock.DrawDebugOutlines = true; dock.Invalidate(); Control.Label l_margin = new Control.Label(gb); l_margin.Text = "Margin:"; l_margin.SetBounds(75, 20, 35, 15); //Align.PlaceRightBottom(l_margin, dock); // can't use Align to anchor with 'dock' because radio group is resized only after layout ~_~ // this is become really cumbersome //l_margin.DrawDebugOutlines = true; Control.HorizontalSlider margin = new HorizontalSlider(gb); margin.Name = "Margin"; margin.UserData.Add("test", subject); margin.Min = 0; margin.Max = 50; margin.Value = 10; margin.SetSize(55, 15); margin.ValueChanged += MarginChanged; Align.PlaceRightBottom(margin, l_margin); dock.SelectionChanged += DockChanged; return(gb); }
private void CreateBasicTab(TabControl tcontainer) { var container = tcontainer.AddPage("Basic").Page; tcontainer.Dock = Gwen.Pos.Fill; //modes GroupBox gb = new GroupBox(container); var modesgb = gb; gb.Text = "Modes"; gb.Width = 180; gb.Height = 160; var marg = tcontainer.Margin; marg.Bottom = 5; tcontainer.Margin = marg; marg = gb.Margin; marg.Bottom = 15; marg.Right = 5; gb.Margin = marg; RecurseLayout(Skin); Gwen.Align.AlignBottom(gb); Gwen.Align.AlignRight(gb); LabeledCheckBox lcb = new LabeledCheckBox(gb); marg = lcb.Margin; marg.Top += 5; lcb.Margin = marg; lcb.Text = "Recording Mode"; lcb.Dock = Pos.Top; lcb.IsChecked = game.SettingRecordingMode; lcb.CheckChanged += (o, e) => { game.SettingRecordingMode = ((LabeledCheckBox)o).IsChecked; }; lcb.SetToolTipText(@"Disables many editor features and changes the client so it can be recorded with a specific aesthetic"); lcb = new LabeledCheckBox(gb); lcb.Text = "Color Playback"; lcb.IsChecked = game.SettingColorPlayback; lcb.CheckChanged += (o, e) => { game.SettingColorPlayback = ((LabeledCheckBox)o).IsChecked; }; lcb.SetToolTipText(@"During playback the lines will no longer turn black by default, and will stay as they are in editor mode"); lcb.Dock = Pos.Top; lcb = new LabeledCheckBox(gb); lcb.Text = "Hit Test"; lcb.IsChecked = game.HitTest; lcb.CheckChanged += (o, e) => { game.HitTest = ((LabeledCheckBox)o).IsChecked; }; lcb.SetToolTipText(@"During playback, hitting a line will turn it the color of the original line."); lcb.Dock = Pos.Top; lcb = new LabeledCheckBox(gb); lcb.Text = "Preview Mode"; lcb.IsChecked = game.SettingPreviewMode; lcb.CheckChanged += (o, e) => { game.SettingPreviewMode = ((LabeledCheckBox)o).IsChecked; }; lcb.Dock = Pos.Top; lcb.SetToolTipText(@"The opposite of Color Playback. The editor will shoe the lines as black instead"); // lcb = new LabeledCheckBox(gb); lcb.Text = "Zero Start"; lcb.IsChecked = game.Track.ZeroStart; lcb.CheckChanged += (o, e) => { game.Track.ZeroStart = ((LabeledCheckBox)o).IsChecked; }; lcb.Dock = Pos.Top; lcb.SetToolTipText(@"Starts the track with 0 momentum"); lcb = new LabeledCheckBox(gb); lcb.Text = "Smooth Camera"; lcb.IsChecked = Settings.Default.SmoothCamera; lcb.CheckChanged += (o, e) => { Settings.Default.SmoothCamera = ((LabeledCheckBox)o).IsChecked; Settings.Default.Save(); }; lcb.Dock = Pos.Top; lcb = new LabeledCheckBox(gb); lcb.Text = "Onion Skinning"; lcb.IsChecked = game.SettingOnionSkinning; lcb.CheckChanged += (o, e) => { game.SettingOnionSkinning = ((LabeledCheckBox)o).IsChecked; game.Invalidate(); }; lcb.Dock = Pos.Top; // gb = new GroupBox(container); gb.Text = "Editor View"; gb.Width = 180; gb.Height = 100; marg = gb.Margin; marg.Bottom = 15; marg.Right = 5; gb.Margin = marg; Gwen.Align.AlignTop(gb); Gwen.Align.AlignRight(gb); Align.PlaceDownLeft(modesgb, gb); lcb = new LabeledCheckBox(gb); marg = lcb.Margin; marg.Top += 5; lcb.Margin = marg; lcb.Text = "Contact Lines"; lcb.IsChecked = game.SettingDrawContactPoints; lcb.CheckChanged += (o, e) => { game.SettingDrawContactPoints = ((LabeledCheckBox)o).IsChecked; }; lcb.Dock = Pos.Top; lcb = new LabeledCheckBox(gb); lcb.Text = "Momentum Vectors"; lcb.IsChecked = game.SettingMomentumVectors; lcb.CheckChanged += (o, e) => { game.SettingMomentumVectors = ((LabeledCheckBox)o).IsChecked; }; lcb.Dock = Pos.Top; lcb = new LabeledCheckBox(gb); lcb.Text = "Gravity Wells"; lcb.IsChecked = game.SettingRenderGravityWells; lcb.CheckChanged += (o, e) => { game.SettingRenderGravityWells = ((LabeledCheckBox)o).IsChecked; game.InvalidateTrack(); }; lcb.Dock = Pos.Top; //playback gb = new GroupBox(container); gb.Text = "Playback"; gb.Width = 180; gb.Height = 150; marg = gb.Margin; marg.Bottom = 5; marg.Right = 5; gb.Margin = marg; Gwen.Align.AlignTop(gb); Gwen.Align.AlignLeft(gb); RadioButtonGroup rbg = new RadioButtonGroup(gb); rbg.Text = "Playback Zoom"; rbg.AddOption("Current Zoom"); rbg.AddOption("Default Zoom"); rbg.AddOption("Specific Zoom"); rbg.SetSelection(Settings.Default.PlaybackZoom); rbg.SelectionChanged += (o, e) => { Settings.Default.PlaybackZoom = ((RadioButtonGroup)o).SelectedIndex; Settings.Default.Save(); }; rbg.Dock = Pos.Top; rbg.AutoSizeToContents = false; rbg.Height = 90; var nud = new NumericUpDown(rbg); nud.Value = Settings.Default.PlaybackZoomSpecific; nud.Max = 24; nud.Min = 1; nud.Dock = Pos.Bottom; nud.ValueChanged += (o, e) => { Settings.Default.PlaybackZoomSpecific = ((NumericUpDown)o).Value; Settings.Default.Save(); }; var cbplayback = new ComboBox(gb); cbplayback.Dock = Pos.Top; for (var i = 0; i < GLWindow.MotionArray.Length; i++) { var f = (GLWindow.MotionArray[i] / 40f); cbplayback.AddItem("Playback: " + f + "x", f.ToString(CultureInfo.InvariantCulture), f); } cbplayback.SelectByName(game.SettingDefaultPlayback.ToString(CultureInfo.InvariantCulture)); cbplayback.ItemSelected += (o, e) => { game.SettingDefaultPlayback = (float)e.SelectedItem.UserData; }; var cbslowmo = new ComboBox(gb); cbslowmo.Dock = Pos.Top; var fpsarray = new[] { 1, 2, 5, 10, 20 }; for (var i = 0; i < fpsarray.Length; i++) { cbslowmo.AddItem("Slowmo FPS: " + fpsarray[i], fpsarray[i].ToString(CultureInfo.InvariantCulture), fpsarray[i]); } cbslowmo.SelectByName(game.SettingSlowmoSpeed.ToString(CultureInfo.InvariantCulture)); cbslowmo.ItemSelected += (o, e) => { game.SettingSlowmoSpeed = (int)e.SelectedItem.UserData; }; //editor var backup = gb; gb = new GroupBox(container); gb.Text = "Editor"; gb.Width = 180; gb.Height = 170; marg = gb.Margin; marg.Bottom = 5; marg.Right = 5; gb.Margin = marg; Gwen.Align.PlaceDownLeft(gb, backup); //Gwen.Align.AlignRight(gb); lcb = new LabeledCheckBox(gb); marg = lcb.Margin; marg.Top += 5; lcb.Margin = marg; lcb.Text = "All Pink Lifelock"; lcb.IsChecked = Settings.Default.PinkLifelock; lcb.CheckChanged += (o, e) => { Settings.Default.PinkLifelock = ((LabeledCheckBox)o).IsChecked; Settings.Default.Save(); }; lcb.Dock = Pos.Top; lcb = new LabeledCheckBox(gb); lcb.Text = "Disable Line Snap"; lcb.IsChecked = game.SettingDisableSnap; lcb.CheckChanged += (o, e) => { game.SettingDisableSnap = ((LabeledCheckBox)o).IsChecked; }; lcb.Dock = Pos.Top; lcb = new LabeledCheckBox(gb); lcb.Text = "Force XY Snap"; lcb.IsChecked = game.SettingForceXySnap; lcb.CheckChanged += (o, e) => { game.SettingForceXySnap = ((LabeledCheckBox)o).IsChecked; }; lcb.Dock = Pos.Top; lcb = new LabeledCheckBox(gb); lcb.Text = "Superzoom"; lcb.IsChecked = Settings.Default.SuperZoom; lcb.CheckChanged += (o, e) => { Settings.Default.SuperZoom = ((LabeledCheckBox)o).IsChecked; Settings.Default.Save(); }; lcb.Dock = Pos.Top; lcb = new LabeledCheckBox(gb); lcb.Text = "White BG"; lcb.SetToolTipText(@"For if you're a bad person"); lcb.IsChecked = Settings.Default.WhiteBG; lcb.CheckChanged += (o, e) => { Settings.Default.WhiteBG = ((LabeledCheckBox)o).IsChecked; Settings.Default.Save(); if (!Settings.Default.NightMode) { GL.ClearColor(Settings.Default.WhiteBG ? GLWindow.ColorWhite : GLWindow.ColorOffwhite); } }; lcb.Dock = Pos.Top; lcb = new LabeledCheckBox(gb); lcb.Text = "Night Mode"; lcb.IsChecked = Settings.Default.NightMode; lcb.CheckChanged += (o, e) => { if (((LabeledCheckBox)o).IsChecked) { GL.ClearColor(new Color4(50, 50, 60, 255)); } else { GL.ClearColor(Settings.Default.WhiteBG ? GLWindow.ColorWhite : GLWindow.ColorOffwhite); } Settings.Default.NightMode = ((LabeledCheckBox)o).IsChecked; Settings.Default.Save(); game.Canvas.ButtonsToggleNightmode(); game.Track.RefreshTrack(); }; lcb.Dock = Pos.Top; lcb = new LabeledCheckBox(gb); lcb.Text = "Live Line Editing"; lcb.SetToolTipText("For the line adjust tool during playback\r\nEnable this if you have a slow PC"); lcb.IsChecked = Settings.Default.LiveAdjustment; lcb.CheckChanged += (o, e) => { Settings.Default.LiveAdjustment = ((LabeledCheckBox)o).IsChecked; Settings.Default.Save(); }; lcb.Dock = Pos.Top; }
private void CreateBasicTab(TabControl tcontainer) { var container = tcontainer.AddPage("Basic").Page; tcontainer.Dock = Gwen.Pos.Fill; //modes GroupBox gb = new GroupBox(container); var modesgb = gb; gb.Text = "Modes"; gb.Width = 180; gb.Height = 200; var marg = tcontainer.Margin; marg.Bottom = 5; tcontainer.Margin = marg; marg = gb.Margin; marg.Bottom = 15; marg.Right = 5; gb.Margin = marg; RecurseLayout(Skin); Gwen.Align.AlignBottom(gb); Gwen.Align.AlignRight(gb); LabeledCheckBox lcb = new LabeledCheckBox(gb); marg = lcb.Margin; marg.Top += 5; lcb.Margin = marg; lcb.Text = "Recording Mode"; lcb.Dock = Pos.Top; lcb.IsChecked = Settings.Local.RecordingMode; lcb.CheckChanged += (o, e) => { Settings.Local.RecordingMode = ((LabeledCheckBox)o).IsChecked; }; lcb.SetToolTipText(@"Disables many editor features and changes the client so it can be recorded with a specific aesthetic"); lcb = new LabeledCheckBox(gb); lcb.Text = "Color Playback"; lcb.IsChecked = Settings.Local.ColorPlayback; lcb.CheckChanged += (o, e) => { Settings.Local.ColorPlayback = ((LabeledCheckBox)o).IsChecked; }; lcb.SetToolTipText(@"During playback the lines will no longer turn black by default, and will stay as they are in editor mode"); lcb.Dock = Pos.Top; lcb = new LabeledCheckBox(gb); lcb.Text = "Hit Test"; lcb.IsChecked = Settings.Local.HitTest; lcb.CheckChanged += (o, e) => { Settings.Local.HitTest = ((LabeledCheckBox)o).IsChecked; }; lcb.SetToolTipText(@"During playback, hitting a line will turn it the color of the original line."); lcb.Dock = Pos.Top; lcb = new LabeledCheckBox(gb); lcb.Text = "Preview Mode"; lcb.IsChecked = Settings.Local.PreviewMode; lcb.CheckChanged += (o, e) => { Settings.Local.PreviewMode = ((LabeledCheckBox)o).IsChecked; }; lcb.Dock = Pos.Top; lcb.SetToolTipText(@"The opposite of Color Playback. The editor will show the lines as black instead"); // lcb = new LabeledCheckBox(gb); lcb.Text = "Zero Start"; lcb.IsChecked = game.Track.ZeroStart; lcb.CheckChanged += (o, e) => { game.Track.ZeroStart = ((LabeledCheckBox)o).IsChecked; }; lcb.Dock = Pos.Top; lcb.SetToolTipText(@"Starts the track with 0 momentum"); lcb = new LabeledCheckBox(gb); lcb.Text = "Smooth Camera"; lcb.IsChecked = Settings.SmoothCamera; lcb.CheckChanged += (o, e) => { Settings.SmoothCamera = ((LabeledCheckBox)o).IsChecked; Settings.Save(); game.Track.Stop(); game.Track.InitCamera(); var round = FindChildByName("roundlegacycamera", true); foreach (var c in round.Children) { c.IsDisabled = Settings.SmoothCamera; } }; lcb.Dock = Pos.Top; lcb.SetToolTipText("Enables a smooth predictive camera.\r\nExperimental and subject to change."); lcb = new LabeledCheckBox(gb); lcb.Name = "roundlegacycamera"; lcb.Text = "Round Legacy Camera"; lcb.IsChecked = Settings.RoundLegacyCamera; lcb.CheckChanged += (o, e) => { Settings.RoundLegacyCamera = ((LabeledCheckBox)o).IsChecked; Settings.Save(); game.Track.Stop(); game.Track.InitCamera(); }; lcb.Dock = Pos.Top; lcb.SetToolTipText("If the new camera is disabled\r\nmakes the camera bounds round\r\ninstead of rectangle"); foreach (var c in lcb.Children) { c.IsDisabled = Settings.SmoothCamera; } lcb = new LabeledCheckBox(gb); lcb.Text = "Smooth Playback"; lcb.IsChecked = Settings.SmoothPlayback; lcb.CheckChanged += (o, e) => { Settings.SmoothPlayback = ((LabeledCheckBox)o).IsChecked; Settings.Save(); }; lcb.SetToolTipText("Interpolates frames for a smooth 60+ fps."); lcb.Dock = Pos.Top; lcb = new LabeledCheckBox(gb); lcb.Text = "Onion Skinning"; lcb.IsChecked = Settings.Local.OnionSkinning; lcb.CheckChanged += (o, e) => { Settings.Local.OnionSkinning = ((LabeledCheckBox)o).IsChecked; game.Invalidate(); }; lcb.Dock = Pos.Top; // gb = new GroupBox(container); gb.Text = "Editor View"; gb.Width = 180; gb.Height = 100; marg = gb.Margin; marg.Bottom = 15; marg.Right = 5; gb.Margin = marg; Gwen.Align.AlignTop(gb); Gwen.Align.AlignRight(gb); Align.PlaceDownLeft(modesgb, gb); lcb = new LabeledCheckBox(gb); marg = lcb.Margin; marg.Top += 5; lcb.Margin = marg; lcb.Text = "Contact Lines"; lcb.IsChecked = Settings.Local.DrawContactPoints; lcb.CheckChanged += (o, e) => { Settings.Local.DrawContactPoints = ((LabeledCheckBox)o).IsChecked; }; lcb.Dock = Pos.Top; lcb = new LabeledCheckBox(gb); lcb.Text = "Momentum Vectors"; lcb.IsChecked = Settings.Local.MomentumVectors; lcb.CheckChanged += (o, e) => { Settings.Local.MomentumVectors = ((LabeledCheckBox)o).IsChecked; }; lcb.Dock = Pos.Top; lcb = new LabeledCheckBox(gb); lcb.Text = "Gravity Wells"; lcb.IsChecked = Settings.Local.RenderGravityWells; lcb.CheckChanged += (o, e) => { Settings.Local.RenderGravityWells = ((LabeledCheckBox)o).IsChecked; game.Track.Invalidate(); }; lcb.Dock = Pos.Top; //playback gb = new GroupBox(container); gb.Text = "Playback"; gb.Width = 180; gb.Height = 150; marg = gb.Margin; marg.Bottom = 5; marg.Right = 5; gb.Margin = marg; Gwen.Align.AlignTop(gb); Gwen.Align.AlignLeft(gb); RadioButtonGroup rbg = new RadioButtonGroup(gb); rbg.Text = "Playback Zoom"; rbg.AddOption("Current Zoom"); rbg.AddOption("Default Zoom"); rbg.AddOption("Specific Zoom"); rbg.SetSelection(Settings.PlaybackZoomType); rbg.SelectionChanged += (o, e) => { Settings.PlaybackZoomType = ((RadioButtonGroup)o).SelectedIndex; Settings.Save(); }; rbg.Dock = Pos.Top; rbg.AutoSizeToContents = false; rbg.Height = 90; var nud = new NumericUpDown(rbg); nud.Value = Settings.PlaybackZoomValue; nud.Max = 24; nud.Min = 1; nud.Dock = Pos.Bottom; nud.ValueChanged += (o, e) => { Settings.PlaybackZoomValue = ((NumericUpDown)o).Value; Settings.Save(); }; var cbplayback = new ComboBox(gb); cbplayback.Dock = Pos.Top; for (var i = 0; i < Constants.MotionArray.Length; i++) { var f = (Constants.MotionArray[i] / (float)Constants.PhysicsRate); cbplayback.AddItem("Playback: " + f + "x", f.ToString(CultureInfo.InvariantCulture), f); } cbplayback.SelectByName(Settings.Local.DefaultPlayback.ToString(CultureInfo.InvariantCulture)); cbplayback.ItemSelected += (o, e) => { Settings.Local.DefaultPlayback = (float)e.SelectedItem.UserData; }; var cbslowmo = new ComboBox(gb); cbslowmo.Dock = Pos.Top; var fpsarray = new[] { 1, 2, 5, 10, 20 }; for (var i = 0; i < fpsarray.Length; i++) { cbslowmo.AddItem("Slowmo FPS: " + fpsarray[i], fpsarray[i].ToString(CultureInfo.InvariantCulture), fpsarray[i]); } cbslowmo.SelectByName(Settings.Local.SlowmoSpeed.ToString(CultureInfo.InvariantCulture)); cbslowmo.ItemSelected += (o, e) => { Settings.Local.SlowmoSpeed = (int)e.SelectedItem.UserData; }; //editor var backup = gb; gb = new GroupBox(container); gb.Text = "Editor"; gb.Width = 180; gb.Height = 170; marg = gb.Margin; marg.Bottom = 5; marg.Right = 5; gb.Margin = marg; Gwen.Align.PlaceDownLeft(gb, backup); //Gwen.Align.AlignRight(gb); lcb = new LabeledCheckBox(gb); marg = lcb.Margin; marg.Top += 5; lcb.Margin = marg; lcb.Text = "All Pink Lifelock"; lcb.SetToolTipText(@"I hope you know where the manual is."); lcb.IsChecked = Settings.PinkLifelock; lcb.CheckChanged += (o, e) => { Settings.PinkLifelock = ((LabeledCheckBox)o).IsChecked; Settings.Save(); }; lcb.Dock = Pos.Top; lcb = new LabeledCheckBox(gb); lcb.Text = "Disable Line Snap"; lcb.IsChecked = Settings.Local.DisableSnap; lcb.CheckChanged += (o, e) => { Settings.Local.DisableSnap = ((LabeledCheckBox)o).IsChecked; }; lcb.Dock = Pos.Top; lcb = new LabeledCheckBox(gb); lcb.Text = "Force XY Snap"; lcb.IsChecked = Settings.Local.ForceXySnap; lcb.CheckChanged += (o, e) => { Settings.Local.ForceXySnap = ((LabeledCheckBox)o).IsChecked; }; lcb.Dock = Pos.Top; lcb = new LabeledCheckBox(gb); lcb.Text = "Superzoom"; lcb.IsChecked = Settings.SuperZoom; lcb.CheckChanged += (o, e) => { Settings.SuperZoom = ((LabeledCheckBox)o).IsChecked; Settings.Save(); }; lcb.Dock = Pos.Top; lcb = new LabeledCheckBox(gb); lcb.Text = "White BG"; lcb.IsChecked = Settings.WhiteBG; lcb.CheckChanged += (o, e) => { Settings.WhiteBG = ((LabeledCheckBox)o).IsChecked; Settings.Save(); }; lcb.Dock = Pos.Top; lcb = new LabeledCheckBox(gb); lcb.Text = "Night Mode"; lcb.IsChecked = Settings.NightMode; lcb.CheckChanged += (o, e) => { Settings.NightMode = ((LabeledCheckBox)o).IsChecked; Settings.Save(); game.Invalidate(); game.Canvas.ButtonsToggleNightmode(); }; lcb.Dock = Pos.Top; lcb = new LabeledCheckBox(container); lcb.Text = "Check for Updates"; lcb.IsChecked = Settings.CheckForUpdates; lcb.CheckChanged += (o, e) => { Settings.CheckForUpdates = ((LabeledCheckBox)o).IsChecked; Settings.Save(); }; lcb.Dock = Pos.Bottom; }
private void PopulatePlayback(ControlBase parent) { var playbackzoom = GwenHelper.CreateHeaderPanel(parent, "Playback Zoom"); RadioButtonGroup pbzoom = new RadioButtonGroup(playbackzoom) { Dock = Dock.Left, ShouldDrawBackground = false, }; pbzoom.AddOption("Default Zoom"); pbzoom.AddOption("Current Zoom"); pbzoom.AddOption("Specific Zoom"); Spinner playbackspinner = new Spinner(pbzoom) { Dock = Dock.Bottom, Max = 24, Min = 1, }; pbzoom.SelectionChanged += (o, e) => { Settings.PlaybackZoomType = ((RadioButtonGroup)o).SelectedIndex; Settings.Save(); playbackspinner.IsHidden = (((RadioButtonGroup)o).SelectedLabel != "Specific Zoom"); }; playbackspinner.ValueChanged += (o, e) => { Settings.PlaybackZoomValue = (float)((Spinner)o).Value; Settings.Save(); }; pbzoom.SetSelection(Settings.PlaybackZoomType); playbackspinner.Value = Settings.PlaybackZoomValue; var playbackmode = GwenHelper.CreateHeaderPanel(parent, "Playback Color"); GwenHelper.AddCheckbox(playbackmode, "Color Playback", Settings.ColorPlayback, (o, e) => { Settings.ColorPlayback = ((Checkbox)o).IsChecked; Settings.Save(); }); var preview = GwenHelper.AddCheckbox(playbackmode, "Preview Mode", Settings.PreviewMode, (o, e) => { Settings.PreviewMode = ((Checkbox)o).IsChecked; Settings.Save(); }); var recording = GwenHelper.AddCheckbox(playbackmode, "Recording Mode", Settings.Local.RecordingMode, (o, e) => { Settings.Local.RecordingMode = ((Checkbox)o).IsChecked; }); var framerate = GwenHelper.CreateHeaderPanel(parent, "Frame Control"); var smooth = GwenHelper.AddCheckbox(framerate, "Smooth Playback", Settings.SmoothPlayback, (o, e) => { Settings.SmoothPlayback = ((Checkbox)o).IsChecked; Settings.Save(); }); ComboBox pbrate = GwenHelper.CreateLabeledCombobox(framerate, "Playback Rate:"); for (var i = 0; i < Constants.MotionArray.Length; i++) { var f = (Constants.MotionArray[i] / (float)Constants.PhysicsRate); pbrate.AddItem(f + "x", f.ToString(CultureInfo.InvariantCulture), f); } pbrate.SelectByName(Settings.DefaultPlayback.ToString(CultureInfo.InvariantCulture)); pbrate.ItemSelected += (o, e) => { Settings.DefaultPlayback = (float)e.SelectedItem.UserData; Settings.Save(); }; var cbslowmo = GwenHelper.CreateLabeledCombobox(framerate, "Slowmo FPS:"); var fpsarray = new[] { 1, 2, 5, 10, 20 }; for (var i = 0; i < fpsarray.Length; i++) { cbslowmo.AddItem(fpsarray[i].ToString(), fpsarray[i].ToString(CultureInfo.InvariantCulture), fpsarray[i]); } cbslowmo.SelectByName(Settings.SlowmoSpeed.ToString(CultureInfo.InvariantCulture)); cbslowmo.ItemSelected += (o, e) => { Settings.SlowmoSpeed = (int)e.SelectedItem.UserData; Settings.Save(); }; smooth.Tooltip = "Interpolates frames from the base\nphysics rate of 40 frames/second\nup to 60 frames/second"; }