public override void Initialize(PropertiesModel.Property property) { base.Initialize(property); m_info = property.EditorAdditionalData<CurveInfo>(); if (m_info != null && m_info.Curves != null && m_info.Curves.Length > 0) { PlayCanvas.CurveSet curveSet = PropertyModel.Data<PlayCanvas.CurveSet>(); if (curveSet == null) curveSet = new PlayCanvas.CurveSet(); if (curveSet.CurvesList.Count < m_info.Curves.Length) for (int i = curveSet.CurvesList.Count; i < m_info.Curves.Length; ++i) curveSet.CurvesList.Add(new PlayCanvas.Curve(new float[] { 0.0f, 0.0f })); PropertyModel.Data<PlayCanvas.CurveSet>(curveSet); } m_curvePictureBox = new PictureBox(); m_curvePictureBox.Cursor = Cursors.Hand; m_curvePictureBox.Width = 0; m_curvePictureBox.Height = 48; m_curvePictureBox.BackColor = Color.FromArgb(255, 64, 64, 64); m_curvePictureBox.Dock = DockStyle.Top; m_curvePictureBox.Click += m_curvePictureBox_Click; m_curvePictureBox.Resize += m_curvePictureBox_Resize; m_curvePictureBox.Paint += m_curvePictureBox_Paint; Content.Controls.Add(m_curvePictureBox); UpdateEditor(); }
public CurveEditDialog(PlayCanvas_Curve_PropertyEditor propertyEditor) { if (propertyEditor == null) throw new ArgumentNullException("`propertyEditor` argument cannot be null!"); m_activeCurve = -1; m_activeKey = -1.0f; m_zoomOut = 1.0f; m_propertyEditor = propertyEditor; m_info = m_propertyEditor.Info == null ? new PlayCanvas_Curve_PropertyEditor.CurveInfo() : m_propertyEditor.Info; if (m_info.Curves != null && m_info.Curves.Length > 0) { m_curveSet = m_propertyEditor.PropertyModel.Data<PlayCanvas.CurveSet>(); if (m_curveSet == null) m_curveSet = new PlayCanvas.CurveSet(); if (m_curveSet.CurvesList.Count < m_info.Curves.Length) for (int i = m_curveSet.CurvesList.Count; i < m_info.Curves.Length; ++i) m_curveSet.CurvesList.Add(new PlayCanvas.Curve(new float[] { 0.0f, 0.0f })); } else { m_curve = m_propertyEditor.PropertyModel.Data<PlayCanvas.Curve>(); if (m_curve == null) m_curve = new PlayCanvas.Curve(); if (m_curve.KeyFrames.Count == 0) m_curve.KeyFrames.Add(0.0f, 0.0f); float diff = Math.Max(Math.Abs(m_info.Max), Math.Abs(m_info.Min)); while (m_zoomOut < diff) m_zoomOut *= 2.0f; } ValidateCurve(); MetroSkinManager.ApplyMetroStyle(this); Size = new Size(640, 480); MinimumSize = new Size(480, 320); Text = (m_curve == null ? "Edit curve set: " : "Edit curve: ") + propertyEditor.PropertyModel.Name; FormClosed += CurveEditDialog_FormClosed; m_editPictureBox = new PictureBox(); m_editPictureBox.Dock = DockStyle.Fill; m_editPictureBox.BackColor = Color.FromArgb(255, 64, 64, 64); m_editPictureBox.Resize += m_editPictureBox_Resize; m_editPictureBox.Paint += m_editPictureBox_Paint; m_editPictureBox.MouseEnter += m_editPictureBox_MouseEnter; m_editPictureBox.MouseDown += m_editPictureBox_MouseDown; m_editPictureBox.MouseUp += m_editPictureBox_MouseUp; m_editPictureBox.MouseMove += m_editPictureBox_MouseMove; m_editPictureBox.MouseWheel += m_editPictureBox_MouseWheel; Controls.Add(m_editPictureBox); m_editPictureBox.Refresh(); MetroPanel topToolbar = new MetroPanel(); MetroSkinManager.ApplyMetroStyle(topToolbar); topToolbar.Width = 0; topToolbar.Height = 30; topToolbar.Dock = DockStyle.Top; Controls.Add(topToolbar); MetroLabel typeLabel = new MetroLabel(); MetroSkinManager.ApplyMetroStyle(typeLabel); typeLabel.Width = 0; typeLabel.Height = 0; typeLabel.AutoSize = true; typeLabel.Dock = DockStyle.Left; typeLabel.Text = "Type:"; if (m_curveSet != null) { m_curvesCheckBoxes = new List<MetroCheckBox>(); foreach (var name in m_info.Curves) { MetroCheckBox checkBox = new MetroCheckBox(); MetroSkinManager.ApplyMetroStyle(checkBox); checkBox.Width = 0; checkBox.AutoSize = true; checkBox.Checked = true; checkBox.Text = name; checkBox.Dock = DockStyle.Right; checkBox.CheckedChanged += checkBox_CheckedChanged; topToolbar.Controls.Add(checkBox); m_curvesCheckBoxes.Add(checkBox); } } m_typeComboBox = new MetroComboBox(); MetroSkinManager.ApplyMetroStyle(m_typeComboBox); m_typeComboBox.Dock = DockStyle.Left; m_typeComboBox.BindingContext = new BindingContext(); m_typeComboBox.DataSource = Enum.GetNames(typeof(PlayCanvas.Curve.CurveType)); if (m_curve != null) m_typeComboBox.SelectedItem = Enum.GetName(typeof(PlayCanvas.Curve.CurveType), m_curve.Type); else if (m_curveSet != null) m_typeComboBox.SelectedItem = Enum.GetName(typeof(PlayCanvas.Curve.CurveType), m_curveSet.Type); m_typeComboBox.SelectedValueChanged += m_typeComboBox_SelectedValueChanged; topToolbar.Controls.Add(m_typeComboBox); topToolbar.Controls.Add(typeLabel); MetroPanel bottomToolbar = new MetroPanel(); MetroSkinManager.ApplyMetroStyle(bottomToolbar); bottomToolbar.Width = 0; bottomToolbar.Height = 24; bottomToolbar.Dock = DockStyle.Bottom; Controls.Add(bottomToolbar); MetroLabel keyLabel = new MetroLabel(); MetroSkinManager.ApplyMetroStyle(keyLabel); keyLabel.Width = 0; keyLabel.Height = 0; keyLabel.AutoSize = true; keyLabel.Dock = DockStyle.Left; keyLabel.Text = "Key frame:"; m_keyTextBox = new MetroTextBox(); MetroSkinManager.ApplyMetroStyle(m_keyTextBox); m_keyTextBox.Width = 100; m_keyTextBox.Dock = DockStyle.Left; m_keyTextBox.TextChanged += m_keyTextBox_TextChanged; m_keyTextBox.CustomPaintForeground += m_keyTextBox_CustomPaintForeground; m_keyTextBox.Leave += m_keyTextBox_Leave; MetroLabel valueLabel = new MetroLabel(); MetroSkinManager.ApplyMetroStyle(valueLabel); valueLabel.Width = 0; valueLabel.Height = 0; valueLabel.AutoSize = true; valueLabel.Dock = DockStyle.Left; valueLabel.Text = "Value:"; m_valueTextBox = new MetroTextBox(); MetroSkinManager.ApplyMetroStyle(m_valueTextBox); m_valueTextBox.Width = 100; m_valueTextBox.Dock = DockStyle.Left; m_valueTextBox.TextChanged += m_valueTextBox_TextChanged; m_valueTextBox.CustomPaintForeground += m_valueTextBox_CustomPaintForeground; m_valueTextBox.Leave += m_valueTextBox_Leave; MetroButton resetButton = new MetroButton(); MetroSkinManager.ApplyMetroStyle(resetButton); resetButton.Width = 0; resetButton.AutoSize = true; resetButton.Dock = DockStyle.Right; resetButton.Text = m_curve == null ? "Reset visible curves" : "Reset curve"; resetButton.Click += resetButton_Click; bottomToolbar.Controls.Add(resetButton); bottomToolbar.Controls.Add(m_valueTextBox); bottomToolbar.Controls.Add(valueLabel); bottomToolbar.Controls.Add(m_keyTextBox); bottomToolbar.Controls.Add(keyLabel); }