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); }
public void RegisterPropertyEditors() { MainForm mainForm = FindForm() as MainForm; if (mainForm == null || mainForm.ProjectModel == null) return; m_editorsRegistry.UnregisterAllControls(); m_editorsRegistry.RegisterControl<PropertyEditors.Number_PropertyEditor>("number"); m_editorsRegistry.RegisterControl<PropertyEditors.String_PropertyEditor>("string"); m_editorsRegistry.RegisterControl<PropertyEditors.Boolean_PropertyEditor>("boolean"); //m_controlsRegistry.RegisterControl<PropertyEditors.Asset_PropertyEditor>("asset"); //m_controlsRegistry.RegisterControl<PropertyEditors.Entity_PropertyEditor>("entity"); m_editorsRegistry.RegisterControl<PropertyEditors.PlayCanvas_Rgb_PropertyEditor>("rgb"); m_editorsRegistry.RegisterControl<PropertyEditors.PlayCanvas_Rgba_PropertyEditor>("rgba"); m_editorsRegistry.RegisterControl<PropertyEditors.PlayCanvas_Vector_PropertyEditor>("vector"); m_editorsRegistry.RegisterControl<PropertyEditors.PlayCanvas_Enumeration_PropertyEditor>("enumeration"); m_editorsRegistry.RegisterControl<PropertyEditors.PlayCanvas_Curve_PropertyEditor>("curve"); m_editorsRegistry.RegisterControl<PropertyEditors.PlayCanvas_ColorCurve_PropertyEditor>("colorcurve"); string assetsPath = Path.Combine(mainForm.ProjectModel.WorkingDirectory, "assets"); DirectoryInfo info = new DirectoryInfo(assetsPath); if (info.Exists) { FileInfo[] files = info.GetFiles("*.editor.json", SearchOption.AllDirectories); if (files != null && files.Length > 0) { foreach (var file in files) { try { string name = file.Name.Remove(file.Name.Length - ".editor.json".Length); string content = File.ReadAllText(file.FullName); if (!String.IsNullOrEmpty(content)) { PropertiesControl.TypeDescriptor typeDesc = JsonConvert.DeserializeObject<PropertiesControl.TypeDescriptor>(content); if (typeDesc == null || !m_editorsRegistry.RegisterControl(name, typeDesc)) throw new Exception("Cannot register custom editor: " + name); } else throw new Exception("Cannot load custom editor: " + file.FullName); } catch (Exception ex) { MetroMessageBox.Show(mainForm, ex.Message, "Registering custom editor error!", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } files = info.GetFiles("*.editor.html", SearchOption.AllDirectories); if (files != null && files.Length > 0) { foreach (var file in files) { try { string name = file.Name.Remove(file.Name.Length - ".editor.html".Length); if (!m_editorsRegistry.RegisterControl(name, file.FullName)) throw new Exception("Cannot register custom editor: " + name); } catch (Exception ex) { MetroMessageBox.Show(mainForm, ex.Message, "Registering custom editor error!", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } } PropertiesModel model = new PropertiesModel(); var numberInfo = new PropertyEditors.Number_PropertyEditor.NumberInfo() { Min = 0.5f, Max = 1.5f }; model.Properties.Add(PropertiesModel.Property.Create<float, PropertyEditors.Number_PropertyEditor.NumberInfo>("number", "number", 1.0f, numberInfo)); model.Properties.Add(PropertiesModel.Property.Create<string>("string", "string", "text")); model.Properties.Add(PropertiesModel.Property.Create<bool>("boolean", "boolean", true)); //model.Properties.Add(PropertiesModel.Property.Create<PlayCanvas.Assets>("asset", "asset", null)); //model.Properties.Add(PropertiesModel.Property.Create<PlayCanvas.Entity>("entity", "entity", null)); model.Properties.Add(PropertiesModel.Property.Create<PlayCanvas.Color>("rgb", "rgb", new PlayCanvas.Color(1.0f, 0.5f, 0.0f))); model.Properties.Add(PropertiesModel.Property.Create<PlayCanvas.Color>("rgba", "rgba", new PlayCanvas.Color(0.0f, 0.5f, 1.0f, 0.5f))); model.Properties.Add(PropertiesModel.Property.Create<PlayCanvas.Vector>("vector", "vector", new PlayCanvas.Vector(0.0f, 1.0f, 0.0f))); var enumsInfo = new PropertyEditors.PlayCanvas_Enumeration_PropertyEditor.EnumerationInfo(); enumsInfo["Cat"] = 0; enumsInfo["Dog"] = 1; model.Properties.Add(PropertiesModel.Property.Create<int, PropertyEditors.PlayCanvas_Enumeration_PropertyEditor.EnumerationInfo>("enumeration", "enumeration", 0, enumsInfo)); var curveData = new float[] { 0.0f, 1.0f, 1.0f, 0.0f }; model.Properties.Add(PropertiesModel.Property.Create<PlayCanvas.Curve>("curve", "curve", new PlayCanvas.Curve(curveData))); var curveSetInfo = new PropertyEditors.PlayCanvas_Curve_PropertyEditor.CurveInfo() { Curves = new string[] { "x", "y", "z" } }; var curveSetData = new float[][] { new float[]{ 0.0f, 1.0f, 1.0f, 0.0f }, new float[]{ 0.0f, 0.5f, 1.0f, 0.5f } }; model.Properties.Add(PropertiesModel.Property.Create<PlayCanvas.CurveSet, PropertyEditors.PlayCanvas_Curve_PropertyEditor.CurveInfo>("curveSet", "curve", new PlayCanvas.CurveSet(curveSetData), curveSetInfo)); var colorCurveSetInfo = new PropertyEditors.PlayCanvas_ColorCurve_PropertyEditor.ColorCurveInfo() { Type = PropertyEditors.PlayCanvas_ColorCurve_PropertyEditor.ColorCurveType.RGB }; model.Properties.Add(PropertiesModel.Property.Create<PlayCanvas.CurveSet, PropertyEditors.PlayCanvas_ColorCurve_PropertyEditor.ColorCurveInfo>("colorCurve", "colorcurve", new PlayCanvas.CurveSet(), colorCurveSetInfo)); model.Properties.Add(PropertiesModel.Property.Create<CustomType>("CustomType", "CustomType")); model.Properties.Add(PropertiesModel.Property.Create<CustomType>("Date", "Date")); model.Properties.Add(new PropertiesModel.Property("Array", "[string]")); model.Properties.Add(new PropertiesModel.Property("Object", "{CustomType}")); PropertiesControl properties = new PropertiesControl(model, m_editorsRegistry); properties.Dock = DockStyle.Fill; m_inspectPanel.Content.Controls.Clear(); m_inspectPanel.Content.Controls.Add(properties); }