public RangeDropDownControl(HCItemProperty itemProperty)
        {
            InitializeComponent();

            AddOkCancelButtons(out _, out _);

            this.itemProperty = itemProperty;

            rangeAttr = (RangeAttribute)itemProperty.Property.GetCustomAttributes(typeof(RangeAttribute)).FirstOrDefault();
            if (rangeAttr == null)
            {
                rangeAttr = new RangeAttribute(0, 100);                   // default
            }
            SetupUIApplicableRange();

            minTrackBar.ValueChanged += new EventHandler(anyTrackBar_ValueChanged);
            maxTrackBar.ValueChanged += new EventHandler(anyTrackBar_ValueChanged);

            object obj = ReferenceUtility.GetUnreferencedValue(itemProperty.GetValues()[0]);

            value = RangeConverter.ObjectToRange(obj);

            propertyItemForUndoSupport = itemProperty.GetItemInHierarchyToRestoreValues();
            propertyItemForUndoSupport.SaveValuesToRestore();

            UpdateTrackBarsAndTextBoxes();

            EditorThemeUtility.ApplyDarkThemeToForm(this);
        }
示例#2
0
        public ScriptDropDownControl(HCItemProperty itemProperty)
        {
            InitializeComponent();

            Resizable     = true;
            SpecialHolder = true;
            //DoubleBuffered = true;
            ResizeRedraw = true;
            MinimumSize  = Size;
            MaximumSize  = new Size(Size.Width * 2, Size.Height * 2);

            AddOkCancelButtons(out _, out _);

            this.itemProperty = itemProperty;

            propertyItemForUndoSupport = itemProperty.GetItemInHierarchyToRestoreValues();
            propertyItemForUndoSupport.SaveValuesToRestore();

            try
            {
                scriptEditorControl.Initialize(new HCItemPropertyScriptAdapter(itemProperty));
            }
            catch (Exception exc)
            {
                Log.Warning("Script editor control init failed: \n\n" + exc.ToString());
                Enabled = false;
            }

            DarkThemeUtility.ApplyToForm(this);
        }
示例#3
0
        private void TrackBar_ValueChanged(object sender, EventArgs e)
        {
            if (trackBarDisableValueChangedEvent)
            {
                return;
            }

            //!!!!new
            if (!trackBarFocused)
            {
                return;
            }

            //begin modifying. save old values for undo
            if (!trackBarModifying)
            {
                trackBarItemInHierarchyToAddUndo = GetItemInHierarchyToRestoreValues();
                trackBarItemInHierarchyToAddUndo.SaveValuesToRestore();
                trackBarModifying = true;
            }

            var control  = (IHCColorValuePowered)CreatedControlInsidePropertyItemControl;
            var trackBar = control.TrackBarPower;

            trackBarDisableValueChangedEvent = true;

            var netType   = Property.Type.GetNetType();
            var unrefType = ReferenceUtility.GetUnreferencedType(netType);


            var values = GetValues();

            if (values == null)
            {
                return;
            }

            //!!!!multiselection
            var value = values[0];

            var unrefValue = ReferenceUtility.GetUnreferencedValue(value);

            var color = (ColorValuePowered)unrefValue;

            try
            {
                var power = powerRange.GetValueFromTrackBar(false, trackBar.Value);
                color.Power = (float)power;

                SetValue(color, false);
            }
            catch
            {
            }

            trackBarDisableValueChangedEvent = false;
        }
示例#4
0
        public EnumDropDownControl(HCItemEnumDropDown itemProperty)
        {
            InitializeComponent();

            this.itemProperty = itemProperty;

            propertyType = ReferenceUtility.GetUnreferencedType(itemProperty.Property.Type.GetNetType());
            if (propertyType.IsEnum)
            {
                enumDataType = Enum.GetUnderlyingType(propertyType);
                isFlag       = propertyType.IsDefined(typeof(FlagsAttribute), false);
            }

            currentValue = ReferenceUtility.GetUnreferencedValue(itemProperty.GetValues()[0]);
            propertyItemForUndoSupport = itemProperty.GetItemInHierarchyToRestoreValues();
            propertyItemForUndoSupport.SaveValuesToRestore();

            listViewEnum.Items.Clear();
            listViewEnum.CheckBoxes = isFlag;

            foreach (var val in Enum.GetValues(propertyType))
            {
                var info = new EnumInfo(val);

                var displayName = info.DisplayName;
                var description = info.Description;
                itemProperty.Owner.PerformOverridePropertyEnumItem(itemProperty, ref displayName, ref description);

                listViewEnum.Items.Add(new ListViewItem
                {
                    Text        = displayName,
                    ToolTipText = description,
                    Tag         = info
                });

                //listViewEnum.Items.Add( new ListViewItem
                //{
                //	Text = info.DisplayName,
                //	ToolTipText = info.Description,
                //	Tag = info
                //} );
            }

            UpdateCheckState();

            int itemCount = listViewEnum.Items.Count;
            var height    = itemCount * (Font.Height + DpiHelper.Default.ScaleValue(4)) + 3;
            var width     = ((IHCProperty)itemProperty.CreatedControl).EditorControl.Width;           //TODO: bad incapsulation. why this control should know about EditorControl.Width ?

            Size = new Size(width, Math.Min(dropdownHeight, height));

            if (EditorAPI.DarkTheme)
            {
                listViewEnum.BackColor = Color.FromArgb(54, 54, 54);
                listViewEnum.ForeColor = Color.FromArgb(240, 240, 240);
            }
        }
        private void TrackBar_ValueChanged(object sender, EventArgs e)
        {
            if (trackBarDisableValueChangedEvent)
            {
                return;
            }

            if (!trackBarFocused)
            {
                return;
            }

            //begin modifying. save old values for undo
            if (!trackBarModifying)
            {
                trackBarItemInHierarchyToAddUndo = GetItemInHierarchyToRestoreValues();
                trackBarItemInHierarchyToAddUndo.SaveValuesToRestore();
                trackBarModifying = true;
            }

            var control  = (IHCTextBoxNumeric)CreatedControlInsidePropertyItemControl;
            var trackBar = control.TrackBar;

            trackBarDisableValueChangedEvent = true;

            var netType   = Property.Type.GetNetType();
            var unrefType = ReferenceUtility.GetUnreferencedType(netType);

            try
            {
                double doubleValue = range.GetValueFromTrackBar(IsInteger(), trackBar.Value);

                //conversion by means string
                string str;
                if (IsInteger())
                {
                    str = Convert.ToInt64(doubleValue).ToString();
                }
                else
                {
                    str = doubleValue.ToString();
                }
                var value = SimpleTypes.ParseValue(unrefType, str);

                SetValue(value, false);
            }
            catch
            {
            }

            trackBarDisableValueChangedEvent = false;
        }
示例#6
0
        //public delegate void OverridePropertyReadOnlyDelegate( HCItemProperty itemProperty, ref bool propertyReadOnly, ref bool handled );
        //public static event OverridePropertyReadOnlyDelegate OverridePropertyReadOnly;

        public static void PerformOverridePropertyReadOnly(HCItemProperty itemProperty, ref bool?readOnly)
        //public static void PerformOverridePropertyReadOnly( HCItemProperty itemProperty, ref bool propertyReadOnly )
        {
            //var handled = false;
            OverridePropertyReadOnly?.Invoke(itemProperty, ref readOnly);
            //, ref handled );
            //if( handled )
            //	return;

            var property = itemProperty.Property;

            //Transform: Position, Rotation, Scale
            if (property.Name == "Position" || property.Name == "Rotation" || property.Name == "Scale")
            {
                var ownerType = property.Owner as Metadata.NetTypeInfo;
                if (ownerType != null && ownerType.Type == typeof(Transform))
                {
                    readOnly = false;
                    //handled = true;
                }
            }

            //array: Length
            if (property.Name == "Length")
            {
                var ownerType = property.Owner as Metadata.TypeInfo;
                if (ownerType != null && ownerType.GetNetType() == typeof(Array))                   // HCItemProperty.IsOneDimensionArray( ownerType.GetNetType() ) )
                {
                    var parentItemProperty = itemProperty.Parent as HCItemProperty;
                    if (parentItemProperty != null && !parentItemProperty.Property.ReadOnly)
                    {
                        readOnly = false;
                        //handled = true;
                    }
                }
            }

            //List, ReferenceList: Count
            if (property.Name == "Count")
            {
                var ownerType = property.Owner as Metadata.TypeInfo;
                if (ownerType != null && HCItemProperty.IsListType(ownerType.GetNetType()))
                {
                    readOnly = false;
                    //handled = true;
                }
            }
        }
        public void ToggleDropDown(HCDropDownControl control, HCItemProperty itemProperty)
        {
            if (dropDownHolder == null)
            {
                if (control.SpecialHolder)
                {
                    dropDownHolder = new HCFormDropDownHolder(control);
                }
                else
                {
                    dropDownHolder = new HCToolStripDropDownHolder(control);
                }

                dropDownHolder.Show(itemProperty.CreatedControlInsidePropertyItemControl);
                dropDownHolder.HolderClosed += DropDownHolder_Closed;
            }
            else
            {
                dropDownHolder.Close();
            }
        }
 private void HierarchicalContainer1_PropertyDisplayNameOverride(HierarchicalContainer sender, HCItemProperty property, ref string displayName)
 {
     displayName = EditorLocalization.Translate("ContentBrowser.Options", displayName);
 }
示例#9
0
        public ColorValuePoweredSelectControl(HCItemProperty itemProperty)
        {
            InitializeComponent();
            AddOkCancelButtons(out okButton, out cancelButton);

            this.itemProperty = itemProperty;

            powered = ReferenceUtility.GetUnreferencedType(itemProperty.Property.Type.GetNetType()) == typeof(ColorValuePowered);

            var values = itemProperty.GetValues();

            if (values == null)
            {
                return;
            }

            //!!!!multiselection
            var value = values[0];

            ColorValuePowered initValue;

            bool readOnly;

            {
                var  netType         = itemProperty.Property.Type.GetNetType();
                bool isReferenceType = ReferenceUtility.IsReferenceType(netType);

                bool       referenceSpecified = false;
                IReference iReference         = null;
                if (isReferenceType && value != null)
                {
                    iReference         = (IReference)value;
                    referenceSpecified = !string.IsNullOrEmpty(iReference.GetByReference);
                }

                readOnly = referenceSpecified;
            }

            if (powered)
            {
                initValue = (ColorValuePowered)ReferenceUtility.GetUnreferencedValue(value);
            }
            else
            {
                var c = (ColorValue)ReferenceUtility.GetUnreferencedValue(value);
                initValue = new ColorValuePowered(c.Red, c.Green, c.Blue, c.Alpha, 1);
            }

            //for( int n = 0; n < propertyOwners.Length; n++ )
            //{
            //	ColorValue v = (ColorValue)property.GetValue( propertyOwners[ n ], null );

            //	if( n != 0 )
            //	{
            //		if( value != v )
            //		{
            //			value = new ColorValue( 1, 1, 1 );
            //			break;
            //		}
            //	}
            //	else
            //		value = v;
            //}

            bool noAlpha = itemProperty.Property.GetCustomAttributes(typeof(ColorValueNoAlphaAttribute), true).Length != 0;

            ApplicableRangeColorValuePowerAttribute powerRange = null;

            if (powered)
            {
                var array = itemProperty.Property.GetCustomAttributes(typeof(ApplicableRangeColorValuePowerAttribute), true);
                if (array.Length != 0)
                {
                    powerRange = (ApplicableRangeColorValuePowerAttribute)array[0];
                }
            }

            Init(initValue, noAlpha, powered, powerRange, readOnly);

            propertyItemForUndoSupport = itemProperty.GetItemInHierarchyToRestoreValues();
            propertyItemForUndoSupport.SaveValuesToRestore();

            EditorThemeUtility.ApplyDarkThemeToForm(this);
        }
 private void HierarchicalContainer1_OverridePropertyDisplayName(HierarchicalContainer sender, HCItemProperty property, ref string displayName)
 {
     displayName = EditorLocalization.Translate("Object.Property", displayName);
 }
 private void HierarchicalContainer1_OverridePropertyDisplayName(HierarchicalContainer sender, HCItemProperty property, ref string displayName)
 {
     try
     {
         if (Provider.DocumentWindow.Document.SpecialMode == "ProjectSettingsUserMode")
         {
             displayName = EditorLocalization.Translate("ProjectSettings.Property", displayName);
         }
         else
         {
             displayName = EditorLocalization.Translate("Object.Property", displayName);
         }
     }
     catch { }
 }
        //[DefaultValue( false )]
        //public bool ReverseItems { get; set; }

        public void PerformOverridePropertyDisplayName(HCItemProperty property, ref string displayName)
        {
            OverridePropertyDisplayName?.Invoke(this, property, ref displayName);
        }
 private void HierarchicalContainer1_PropertyDisplayNameOverride(HierarchicalContainer sender, HCItemProperty property, ref string displayName)
 {
     displayName = Translate(displayName);
 }
示例#14
0
 public HCItemPropertyScriptAdapter(HCItemProperty itemProperty)
 {
     this.itemProperty = itemProperty;
 }
示例#15
0
        public static void PerformOverridePropertySetValue(HCItemProperty.PropertySetValueData data)
        {
            OverridePropertySetValue?.Invoke(data);

            var property = data.itemProperty.Property;

            //Transform: Position, Rotation, Scale
            if (data.parentItemProperty != null && ReferenceUtility.GetUnreferencedType(data.parentItemProperty.Property.Type.GetNetType()) == typeof(Transform))
            {
                for (int n = 0; n < data.itemProperty.ControlledObjects.Length; n++)
                {
                    var old = data.itemProperty.ControlledObjects[n];
                    if (property.Name == "Position")
                    {
                        data.itemProperty.ControlledObjects[n] = old.GetType().GetMethod("UpdatePosition").Invoke(old, new object[] { data.value });
                    }
                    else if (property.Name == "Rotation")
                    {
                        data.itemProperty.ControlledObjects[n] = old.GetType().GetMethod("UpdateRotation").Invoke(old, new object[] { data.value });
                    }
                    else if (property.Name == "Scale")
                    {
                        data.itemProperty.ControlledObjects[n] = old.GetType().GetMethod("UpdateScale").Invoke(old, new object[] { data.value });
                    }
                }

                data.setValueHandled = true;
            }

            //array: Length
            if (property.Name == "Length")
            {
                var ownerType = property.Owner as Metadata.TypeInfo;
                if (ownerType != null && ownerType.GetNetType() == typeof(Array))                   // HCItemProperty.IsOneDimensionArray( ownerType.GetNetType() ) )
                {
                    int newLength = (int)data.unrefValue;

                    for (int nCollectedObject = 0; nCollectedObject < data.parentItemProperty.ControlledObjects.Length; nCollectedObject++)
                    {
                        var array = (IList)ReferenceUtility.GetUnreferencedValue(data.itemProperty.ControlledObjects[nCollectedObject]);
                        if (array != null && array.Count != newLength)
                        {
                            var newArray = Array.CreateInstance(array.GetType().GetElementType(), newLength);
                            Array.Copy((Array)array, newArray, Math.Min(newLength, array.Count));

                            //!!!!multiselection. вместе undo все

                            data.parentItemProperty.SetValue(newArray, data.addUndo);
                        }
                    }

                    data.setValueHandled             = true;
                    data.addUndoHandled              = true;
                    data.updateParentPropertyHandled = true;
                }
            }

            //List: Count
            if (property.Name == "Count")
            {
                var ownerType = property.Owner as Metadata.TypeInfo;
                if (ownerType != null && HCItemProperty.IsListType(ownerType.GetNetType()))
                {
                    int newCount = (int)data.unrefValue;

                    for (int nCollectedObject = 0; nCollectedObject < data.parentItemProperty.ControlledObjects.Length; nCollectedObject++)
                    {
                        var list = (IList)ReferenceUtility.GetUnreferencedValue(data.itemProperty.ControlledObjects[nCollectedObject]);
                        if (list != null)
                        {
                            if (newCount < list.Count)
                            {
                                //remove items

                                if (!data.addUndoHandled && data.addUndo && data.itemProperty.Owner.DocumentWindow?.Document != null)
                                {
                                    //remove with undo

                                    var indexes = new List <int>();
                                    for (int n = newCount; n < list.Count; n++)
                                    {
                                        indexes.Add(n);
                                    }
                                    var undoAction = new UndoActionListAddRemove(list, indexes, false);

                                    DocumentInstance document = data.itemProperty.Owner.DocumentWindow.Document;
                                    document.UndoSystem.CommitAction(undoAction);
                                    document.Modified = true;
                                }
                                else
                                {
                                    //remove without undo
                                    while (list.Count > newCount)
                                    {
                                        list.RemoveAt(list.Count - 1);
                                    }
                                }
                            }
                            else if (newCount > list.Count)
                            {
                                //add items

                                var indexes = new List <int>();
                                for (int n = list.Count; n < newCount; n++)
                                {
                                    indexes.Add(n);
                                }

                                var elementType = list.GetType().GetGenericArguments()[0];
                                while (list.Count < newCount)
                                {
                                    object itemValue     = null;
                                    var    referenceList = list as IReferenceList;
                                    if (referenceList != null)
                                    {
                                        itemValue = Activator.CreateInstance(referenceList.GetItemType());                                          // referenceList.CreateItemValue();
                                    }
                                    else if (elementType.IsValueType)
                                    {
                                        itemValue = Activator.CreateInstance(elementType);
                                    }
                                    list.Add(itemValue);
                                }

                                //undo
                                if (!data.addUndoHandled && data.addUndo && data.itemProperty.Owner.DocumentWindow?.Document != null)
                                {
                                    var undoAction = new UndoActionListAddRemove(list, indexes, true);

                                    DocumentInstance document = data.itemProperty.Owner.DocumentWindow.Document;
                                    document.UndoSystem.CommitAction(undoAction);
                                    document.Modified = true;
                                }
                            }
                        }
                    }

                    data.setValueHandled             = true;
                    data.addUndoHandled              = true;
                    data.updateParentPropertyHandled = true;
                }
            }
        }