Browse Source

Removed requirement for inspector GUI objects to track if changes were made in order to reduce their code size

BearishSun 10 years ago
parent
commit
edd6cd973e

+ 5 - 2
BansheeEditor/Source/BsGUIColor.cpp

@@ -47,9 +47,12 @@ namespace BansheeEngine
 
 	void GUIColor::setColor(const Color& color)
 	{
-		mColor = color;
+		if (color != mColor)
+		{
+			mColor = color;
 
-		_markContentAsDirty();
+			_markContentAsDirty();
+		}
 	}
 
 	void GUIColor::setTint(const Color& color)

+ 2 - 11
BansheeEditor/Source/BsGUISliderField.cpp

@@ -52,14 +52,9 @@ namespace BansheeEngine
 
 	void GUISliderField::setValue(float value)
 	{
-		bool changed = false;
-
 		float origValue = mSlider->getValue();
 		if (origValue != value)
-		{
 			mSlider->setValue(value);
-			changed = true;
-		}
 
 		float clampedValue = mSlider->getValue();
 
@@ -68,13 +63,7 @@ namespace BansheeEngine
 		// updates back to "0" effectively making "." unusable
 		float curValue = parseFloat(mInputBox->getText());
 		if (clampedValue != curValue)
-		{
 			mInputBox->setText(toWString(clampedValue));
-			changed = true;
-		}
-
-		if (changed)
-			onValueChanged(clampedValue);
 	}
 
 	void GUISliderField::setRange(float min, float max)
@@ -137,6 +126,8 @@ namespace BansheeEngine
 	void GUISliderField::sliderChanged(float newValue)
 	{
 		setValue(mSlider->getValue());
+
+		onValueChanged(mSlider->getValue());
 	}
 
 	void GUISliderField::focusGained()

+ 3 - 0
BansheeEditor/Source/BsGUIToggleField.cpp

@@ -24,6 +24,9 @@ namespace BansheeEngine
 
 	void GUIToggleField::setValue(bool value)
 	{
+		if (mValue == value)
+			return;
+
 		mValue = value;
 
 		if(value) 

+ 19 - 3
BansheeEngine/Source/BsGUIListBox.cpp

@@ -89,14 +89,30 @@ namespace BansheeEngine
 
 	void GUIListBox::setElementStates(const Vector<bool>& states)
 	{
+		UINT32 numElements = (UINT32)mElementStates.size();
+		UINT32 min = std::min(numElements, (UINT32)states.size());
+
+		bool anythingModified = min != numElements;
+		if (!anythingModified)
+		{
+			for (UINT32 i = 0; i < numElements; i++)
+			{
+				if (mElementStates[i] != states[i])
+				{
+					anythingModified = true;
+					break;
+				}
+			}
+		}
+
+		if (!anythingModified)
+			return;
+
 		bool wasOpen = mDropDownBox != nullptr;
 
 		if (wasOpen)
 			closeListBox();
 
-		UINT32 numElements = (UINT32)mElementStates.size();
-		UINT32 min = std::min(numElements, (UINT32)states.size());
-
 		for (UINT32 i = 0; i < min; i++)
 		{
 			mElementStates[i] = states[i];

+ 4 - 13
MBansheeEditor/GUI/GUIDictionaryField.cs

@@ -142,20 +142,13 @@ namespace BansheeEditor
 
             for (int i = 0; i < rows.Count; i++)
             {
-                bool updateGUI;
-
-                anythingModified |= rows[i].Refresh(out updateGUI);
-
-                if (updateGUI)
+                if (rows[i].Refresh())
                     rows[i].BuildGUI(this, guiContentLayout, i, depth);
             }
 
             if (editRow.Enabled)
             {
-                bool updateGUI;
-                anythingModified |= editRow.Refresh(out updateGUI);
-
-                if (updateGUI)
+                if (editRow.Refresh())
                     editRow.BuildGUI(this, guiContentLayout, rows.Count, depth);
             }
 
@@ -848,11 +841,9 @@ namespace BansheeEditor
         /// <summary>
         /// Refreshes the GUI for the dictionary row and checks if anything was modified.
         /// </summary>
-        /// <param name="rebuildGUI">Determines should the field's GUI elements be updated due to modifications.</param>
-        /// <returns>True if any modifications were made, false otherwise.</returns>
-        internal protected virtual bool Refresh(out bool rebuildGUI)
+        /// <returns>Determines should the field's GUI elements be updated due to modifications.</returns>
+        internal protected virtual bool Refresh()
         {
-            rebuildGUI = false;
             return false;
         }
 

+ 2 - 6
MBansheeEditor/Inspector/GenericInspector.cs

@@ -38,18 +38,14 @@ namespace BansheeEditor
         }
 
         /// <inheritdoc/>
-        protected internal override bool Refresh()
+        protected internal override void Refresh()
         {
-            bool anythingModified = false;
-
             int currentIndex = 0;
             foreach (var field in inspectableFields)
             {
-                anythingModified |= field.Refresh(currentIndex);
+                field.Refresh(currentIndex);
                 currentIndex += field.GetNumLayoutElements();
             }
-
-            return anythingModified;
         }
 
         /// <inheritdoc/>

+ 1 - 2
MBansheeEditor/Inspector/Inspector.cs

@@ -74,7 +74,6 @@ namespace BansheeEditor
         /// <summary>
         /// Checks if contents of the inspector have been modified, and updates them if needed.
         /// </summary>
-        /// <returns>True if there were any modifications, false otherwise.</returns>
-        protected internal abstract bool Refresh();
+        protected internal abstract void Refresh();
     }
 }

+ 16 - 93
MBansheeEditor/Inspectors/CameraInspector.cs

@@ -35,106 +35,33 @@ namespace BansheeEditor
         }
 
         /// <inheritdoc/>
-        protected internal override bool Refresh()
+        protected internal override void Refresh()
         {
             Camera camera = referencedObject as Camera;
             if (camera == null)
-                return false;
-
-            bool anythingModified = false;
+                return;
 
             ProjectionType projType = camera.ProjectionType;
             if (projectionTypeField.Value != (ulong)projType)
             {
                 projectionTypeField.Value = (ulong)projType;
                 ToggleTypeSpecificFields(projType);
-
-                anythingModified = true;
-            }
-
-            if (fieldOfView.Value != camera.FieldOfView.Degrees)
-            {
-                fieldOfView.Value = camera.FieldOfView.Degrees;
-                anythingModified = true;
-            }
-
-            if (orthoHeight.Value != camera.OrthoHeight)
-            {
-                orthoHeight.Value = camera.OrthoHeight;
-                anythingModified = true;
             }
 
-            if (aspectField.Value != camera.AspectRatio)
-            {
-                aspectField.Value = camera.AspectRatio;
-                anythingModified = true;
-            }
-
-            if (nearPlaneField.Value != camera.NearClipPlane)
-            {
-                nearPlaneField.Value = camera.NearClipPlane;
-                anythingModified = true;
-            }
-
-            if (farPlaneField.Value != camera.FarClipPlane)
-            {
-                farPlaneField.Value = camera.FarClipPlane;
-                anythingModified = true;
-            }
-
-            if (viewportXField.Value != camera.ViewportRect.x)
-            {
-                viewportXField.Value = camera.ViewportRect.x;
-                anythingModified = true;
-            }
-
-            if (viewportYField.Value != camera.ViewportRect.y)
-            {
-                viewportYField.Value = camera.ViewportRect.y;
-                anythingModified = true;
-            }
-
-            if (viewportWidthField.Value != camera.ViewportRect.width)
-            {
-                viewportWidthField.Value = camera.ViewportRect.width;
-                anythingModified = true;
-            }
-
-            if (viewportHeightField.Value != camera.ViewportRect.height)
-            {
-                viewportHeightField.Value = camera.ViewportRect.height;
-                anythingModified = true;
-            }
-
-            if (clearFlagsFields.Value != (ulong)camera.ClearFlags)
-            {
-                clearFlagsFields.Value = (ulong)camera.ClearFlags;
-                anythingModified = true;
-            }
-
-            if (clearStencilField.Value != camera.ClearStencil)
-            {
-                clearStencilField.Value = camera.ClearStencil;
-                anythingModified = true;
-            }
-
-            if (clearDepthField.Value != camera.ClearDepth)
-            {
-                clearDepthField.Value = camera.ClearDepth;
-                anythingModified = true;
-            }
-
-            if (clearColorField.Value != camera.ClearColor)
-            {
-                clearColorField.Value = camera.ClearColor;
-                anythingModified = true;
-            }
-
-            if (priorityField.Value != camera.Priority)
-            {
-                priorityField.Value = camera.Priority;
-                anythingModified = true;
-            }
+            fieldOfView.Value = camera.FieldOfView.Degrees;
+            orthoHeight.Value = camera.OrthoHeight;
+            aspectField.Value = camera.AspectRatio;
+            nearPlaneField.Value = camera.NearClipPlane;
+            farPlaneField.Value = camera.FarClipPlane;
+            viewportXField.Value = camera.ViewportRect.x;
+            viewportYField.Value = camera.ViewportRect.y;
+            viewportWidthField.Value = camera.ViewportRect.width;
+            viewportHeightField.Value = camera.ViewportRect.height;
+            clearFlagsFields.Value = (ulong)camera.ClearFlags;
+            clearStencilField.Value = camera.ClearStencil;
+            clearDepthField.Value = camera.ClearDepth;
+            clearColorField.Value = camera.ClearColor;
+            priorityField.Value = camera.Priority;
 
             if (layersValue != camera.Layers)
             {
@@ -144,11 +71,7 @@ namespace BansheeEditor
 
                 layersField.States = states;
                 layersValue = camera.Layers;
-
-                anythingModified = true;
             }
-
-            return anythingModified;
         }
 
         /// <summary>

+ 6 - 19
MBansheeEditor/Inspectors/FontInspector.cs

@@ -29,7 +29,7 @@ namespace BansheeEditor
         }
 
         /// <inheritdoc/>
-        protected internal override bool Refresh()
+        protected internal override void Refresh()
         {
             FontImportOptions newImportOptions = GetImportOptions();
 
@@ -60,25 +60,12 @@ namespace BansheeEditor
             if (rebuildGUI)
                 BuildGUI();
 
-            bool anythingModified = fontSizes.Refresh();
-            anythingModified |= charRanges.Refresh();
+            fontSizes.Refresh();
+            charRanges.Refresh();
 
-            if (antialiasingField.Value != newImportOptions.Antialiasing)
-            {
-                antialiasingField.Value = newImportOptions.Antialiasing;
-                anythingModified = true;
-            }
-
-            if (dpiField.Value != newImportOptions.DPI)
-            {
-                dpiField.Value = newImportOptions.DPI;
-                anythingModified = true;
-            }
-
-            if (anythingModified)
-                importOptions = newImportOptions;
-
-            return anythingModified;
+            antialiasingField.Value = newImportOptions.Antialiasing;
+            dpiField.Value = newImportOptions.DPI;
+            importOptions = newImportOptions;
         }
 
         /// <summary>

+ 43 - 161
MBansheeEditor/Inspectors/GUISkinInspector.cs

@@ -21,9 +21,9 @@ namespace BansheeEditor
         }
 
         /// <inheritdoc/>
-        protected internal override bool Refresh()
+        protected internal override void Refresh()
         {
-            return valuesField.Refresh(); ;
+            valuesField.Refresh(); ;
         }
 
         /// <summary>
@@ -107,19 +107,12 @@ namespace BansheeEditor
             }
 
             /// <inheritdoc/>
-            internal protected override bool Refresh(out bool rebuildGUI)
+            internal protected override bool Refresh()
             {
-                rebuildGUI = false;
+                keyField.Value = GetKey<string>();
+                valueField.Refresh();
 
-                string newKey = GetKey<string>();
-                if (keyField.Value != newKey)
-                {
-                    keyField.Value = newKey;
-                    return true;
-                }
-
-                // Key cannot be changed so we don't check it here
-                return valueField.Refresh();
+                return false;
             }
         }
 
@@ -253,109 +246,36 @@ namespace BansheeEditor
             /// <summary>
             /// Updates all GUI elements from the style if style changes.
             /// </summary>
-            /// <returns>True if any changes were made.</returns>
-            public bool Refresh()
+            public void Refresh()
             {
-                bool anythingModified = false;
-
-                if (fontField.Value != style.Font)
-                {
-                    fontField.Value = style.Font;
-                    anythingModified = true;
-                }
-
-                if (fontSizeField.Value != style.FontSize)
-                {
-                    fontSizeField.Value = style.FontSize;
-                    anythingModified = true;
-                }
-
-                if (horzAlignField.Value != (ulong)style.TextHorzAlign)
-                {
-                    horzAlignField.Value = (ulong)style.TextHorzAlign;
-                    anythingModified = true;
-                }
-
-                if (vertAlignField.Value != (ulong)style.TextVertAlign)
-                {
-                    vertAlignField.Value = (ulong)style.TextVertAlign;
-                    anythingModified = true;
-                }
-
-                if (imagePositionField.Value != (ulong)style.ImagePosition)
-                {
-                    imagePositionField.Value = (ulong)style.ImagePosition;
-                    anythingModified = true;
-                }
-
-                if (wordWrapField.Value != style.WordWrap)
-                {
-                    wordWrapField.Value = style.WordWrap;
-                    anythingModified = true;
-                }
-
-                anythingModified |= normalGUI.Refresh();
-                anythingModified |= hoverGUI.Refresh();
-                anythingModified |= activeGUI.Refresh();
-                anythingModified |= focusedGUI.Refresh();
-                anythingModified |= normalOnGUI.Refresh();
-                anythingModified |= hoverOnGUI.Refresh();
-                anythingModified |= activeOnGUI.Refresh();
-                anythingModified |= focusedOnGUI.Refresh();
-
-                anythingModified |= borderGUI.Refresh(style.Border);
-                anythingModified |= marginsGUI.Refresh(style.Margins);
-                anythingModified |= contentOffsetGUI.Refresh(style.ContentOffset);
-
-                if (fixedWidthField.Value != style.FixedWidth)
-                {
-                    fixedWidthField.Value = style.FixedWidth;
-                    anythingModified = true;
-                }
-
-                if (widthField.Value != style.Width)
-                {
-                    widthField.Value = style.Width;
-                    anythingModified = true;
-                }
-
-                if (minWidthField.Value != style.MinWidth)
-                {
-                    minWidthField.Value = style.MinWidth;
-                    anythingModified = true;
-                }
-
-                if (maxWidthField.Value != style.MaxWidth)
-                {
-                    maxWidthField.Value = style.MaxWidth;
-                    anythingModified = true;
-                }
-
-                if (fixedHeightField.Value != style.FixedHeight)
-                {
-                    fixedHeightField.Value = style.FixedHeight;
-                    anythingModified = true;
-                }
-
-                if (heightField.Value != style.Height)
-                {
-                    heightField.Value = style.Height;
-                    anythingModified = true;
-                }
-
-                if (minHeightField.Value != style.MinHeight)
-                {
-                    minHeightField.Value = style.MinHeight;
-                    anythingModified = true;
-                }
-
-                if (maxHeightField.Value != style.MaxHeight)
-                {
-                    maxHeightField.Value = style.MaxHeight;
-                    anythingModified = true;
-                }
-
-                return anythingModified;
+                fontField.Value = style.Font;
+                fontSizeField.Value = style.FontSize;
+                horzAlignField.Value = (ulong)style.TextHorzAlign;
+                vertAlignField.Value = (ulong)style.TextVertAlign;
+                imagePositionField.Value = (ulong)style.ImagePosition;
+                wordWrapField.Value = style.WordWrap;
+
+                normalGUI.Refresh();
+                hoverGUI.Refresh();
+                activeGUI.Refresh();
+                focusedGUI.Refresh();
+                normalOnGUI.Refresh();
+                hoverOnGUI.Refresh();
+                activeOnGUI.Refresh();
+                focusedOnGUI.Refresh();
+
+                borderGUI.Refresh(style.Border);
+                marginsGUI.Refresh(style.Margins);
+                contentOffsetGUI.Refresh(style.ContentOffset);
+
+                fixedWidthField.Value = style.FixedWidth;
+                widthField.Value = style.Width;
+                minWidthField.Value = style.MinWidth;
+                maxWidthField.Value = style.MaxWidth;
+                fixedHeightField.Value = style.FixedHeight;
+                heightField.Value = style.Height;
+                minHeightField.Value = style.MinHeight;
+                maxHeightField.Value = style.MaxHeight;
             }
 
             /// <summary>
@@ -397,24 +317,10 @@ namespace BansheeEditor
                 /// <summary>
                 /// Updates all GUI elements from the state if state changes.
                 /// </summary>
-                /// <returns>True if any changes were made.</returns>
-                public bool Refresh()
+                public void Refresh()
                 {
-                    bool anythingModified = false;
-
-                    if (textureField.Value != state.Texture)
-                    {
-                        state.Texture = (SpriteTexture)textureField.Value;
-                        anythingModified = true;
-                    }
-
-                    if (textColorField.Value != state.TextColor)
-                    {
-                        state.TextColor = textColorField.Value;
-                        anythingModified = true;
-                    }
-
-                    return anythingModified;
+                    textureField.Value = state.Texture;
+                    textColorField.Value = state.TextColor;
                 }
             }
 
@@ -495,36 +401,12 @@ namespace BansheeEditor
                 /// Updates all GUI elements from the offset if offset changes.
                 /// </summary>
                 /// <param name="offset">New (potentially modified) offset.</param>
-                /// <returns>True if any changes were made.</returns>
-                public bool Refresh(RectOffset offset)
+                public void Refresh(RectOffset offset)
                 {
-                    bool anythingModified = false;
-
-                    if (offsetLeftField.Value != offset.left)
-                    {
-                        offsetLeftField.Value = offset.left;
-                        anythingModified = true;
-                    }
-
-                    if (offsetRightField.Value != offset.right)
-                    {
-                        offsetRightField.Value = offset.right;
-                        anythingModified = true;
-                    }
-
-                    if (offsetTopField.Value != offset.top)
-                    {
-                        offsetTopField.Value = offset.top;
-                        anythingModified = true;
-                    }
-
-                    if (offsetBottomField.Value != offset.bottom)
-                    {
-                        offsetBottomField.Value = offset.bottom;
-                        anythingModified = true;
-                    }
-
-                    return anythingModified;
+                    offsetLeftField.Value = offset.left;
+                    offsetRightField.Value = offset.right;
+                    offsetTopField.Value = offset.top;
+                    offsetBottomField.Value = offset.bottom;
                 }
             }
         }

+ 8 - 42
MBansheeEditor/Inspectors/LightInspector.cs

@@ -51,59 +51,25 @@ namespace BansheeEditor
         }
 
         /// <inheritdoc/>
-        protected internal override bool Refresh()
+        protected internal override void Refresh()
         {
             Light light = referencedObject as Light;
             if (light == null)
-                return false;
-
-            bool anythingModified = false;
+                return;
 
             LightType lightType = light.Type;
             if (lightTypeField.Value != (ulong)lightType)
             {
                 lightTypeField.Value = (ulong)lightType;
                 ToggleTypeSpecificFields(lightType);
-                anythingModified = true;
-            }
-
-            if (colorField.Value != light.Color)
-            {
-                colorField.Value = light.Color;
-                anythingModified = true;
-            }
-
-            if (intensityField.Value != light.Intensity)
-            {
-                intensityField.Value = light.Intensity;
-                anythingModified = true;
-            }
-
-            if (rangeField.Value != light.Range)
-            {
-                rangeField.Value = light.Range;
-                anythingModified = true;
-            }
-
-            if (spotAngleField.Value != light.SpotAngle.Degrees)
-            {
-                spotAngleField.Value = light.SpotAngle.Degrees;
-                anythingModified = true;
-            }
-
-            if (spotFalloffAngleField.Value != light.SpotFalloffAngle.Degrees)
-            {
-                spotFalloffAngleField.Value = light.SpotFalloffAngle.Degrees;
-                anythingModified = true;
-            }
-
-            if (castShadowField.Value != light.CastsShadow)
-            {
-                castShadowField.Value = light.CastsShadow;
-                anythingModified = true;
             }
 
-            return anythingModified;
+            colorField.Value = light.Color;
+            intensityField.Value = light.Intensity;
+            rangeField.Value = light.Range;
+            spotAngleField.Value = light.SpotAngle.Degrees;
+            spotFalloffAngleField.Value = light.SpotFalloffAngle.Degrees;
+            castShadowField.Value = light.CastsShadow;
         }
 
         /// <summary>

+ 20 - 81
MBansheeEditor/Inspectors/MaterialInspector.cs

@@ -32,28 +32,23 @@ namespace BansheeEditor
         }
 
         /// <inheritdoc/>
-        protected internal override bool Refresh()
+        protected internal override void Refresh()
         {
             Material material = referencedObject as Material;
             if (material == null)
-                return false;
-
-            bool anythingModified = false;
+                return;
 
             if (material.Shader != shaderField.Value)
             {
                 shaderField.Value = material.Shader;
                 RebuildParamGUI(material);
-                anythingModified = true;
             }
 
             if (guiParams != null)
             {
                 foreach (var param in guiParams)
-                    anythingModified |= param.Refresh(material);
+                    param.Refresh(material);
             }
-
-            return anythingModified;
         }
 
         /// <summary>
@@ -147,8 +142,7 @@ namespace BansheeEditor
         /// Checks if the data stored in GUI and in the material matches, and updates the GUI if it doesn't.
         /// </summary>
         /// <param name="material">Material whose data to check.</param>
-        /// <returns>True if anything was modified, false otherwise.</returns>
-        internal abstract bool Refresh(Material material);
+        internal abstract void Refresh(Material material);
 
         /// <summary> 
         /// Destroys the internal GUI elements.
@@ -184,16 +178,9 @@ namespace BansheeEditor
         }
 
         /// <inheritdoc/>
-        internal override bool Refresh(Material material)
+        internal override void Refresh(Material material)
         {
-            float value = material.GetFloat(shaderParam.name);
-            if (value != guiElem.Value)
-            {
-                guiElem.Value = value;
-                return true;
-            }
-
-            return false;
+            guiElem.Value = material.GetFloat(shaderParam.name);
         }
 
         /// <inheritdoc/>
@@ -231,16 +218,9 @@ namespace BansheeEditor
         }
 
         /// <inheritdoc/>
-        internal override bool Refresh(Material material)
+        internal override void Refresh(Material material)
         {
-            Vector2 value = material.GetVector2(shaderParam.name);
-            if (value != guiElem.Value)
-            {
-                guiElem.Value = value;
-                return true;
-            }
-
-            return false;
+            guiElem.Value = material.GetVector2(shaderParam.name);
         }
 
         /// <inheritdoc/>
@@ -278,16 +258,9 @@ namespace BansheeEditor
         }
 
         /// <inheritdoc/>
-        internal override bool Refresh(Material material)
+        internal override void Refresh(Material material)
         {
-            Vector3 value = material.GetVector3(shaderParam.name);
-            if (value != guiElem.Value)
-            {
-                guiElem.Value = value;
-                return true;
-            }
-
-            return false;
+            guiElem.Value = material.GetVector3(shaderParam.name);
         }
 
         /// <inheritdoc/>
@@ -325,16 +298,9 @@ namespace BansheeEditor
         }
 
         /// <inheritdoc/>
-        internal override bool Refresh(Material material)
+        internal override void Refresh(Material material)
         {
-            Vector4 value = material.GetVector4(shaderParam.name);
-            if (value != guiElem.Value)
-            {
-                guiElem.Value = value;
-                return true;
-            }
-
-            return false;
+            guiElem.Value = material.GetVector4(shaderParam.name);
         }
 
         /// <inheritdoc/>
@@ -398,25 +364,18 @@ namespace BansheeEditor
         }
 
         /// <inheritdoc/>
-        internal override bool Refresh(Material material)
+        internal override void Refresh(Material material)
         {
             Matrix3 value = material.GetMatrix3(shaderParam.name);
 
-            bool wasModified = false;
             for (int row = 0; row < MAT_SIZE; row++)
             {
                 for (int col = 0; col < MAT_SIZE; col++)
                 {
                     int index = row * MAT_SIZE + col;
-                    if (value[row, col] != guiMatFields[index].Value)
-                    {
-                        guiMatFields[index].Value = value[row, col];
-                        wasModified = true;
-                    }
+                    guiMatFields[index].Value = value[row, col];
                 }
             }
-
-            return wasModified;
         }
 
         /// <inheritdoc/>
@@ -487,25 +446,18 @@ namespace BansheeEditor
         }
 
         /// <inheritdoc/>
-        internal override bool Refresh(Material material)
+        internal override void Refresh(Material material)
         {
             Matrix4 value = material.GetMatrix4(shaderParam.name);
 
-            bool wasModified = false;
             for (int row = 0; row < MAT_SIZE; row++)
             {
                 for (int col = 0; col < MAT_SIZE; col++)
                 {
                     int index = row * MAT_SIZE + col;
-                    if (value[row, col] != guiMatFields[index].Value)
-                    {
-                        guiMatFields[index].Value = value[row, col];
-                        wasModified = true;
-                    }
+                    guiMatFields[index].Value = value[row, col];
                 }
             }
-
-            return wasModified;
         }
 
         /// <inheritdoc/>
@@ -550,16 +502,9 @@ namespace BansheeEditor
         }
 
         /// <inheritdoc/>
-        internal override bool Refresh(Material material)
+        internal override void Refresh(Material material)
         {
-            Color value = material.GetColor(shaderParam.name);
-            if (value != guiElem.Value)
-            {
-                guiElem.Value = value;
-                return true;
-            }
-
-            return false;
+            guiElem.Value = material.GetColor(shaderParam.name);
         }
 
         /// <inheritdoc/>
@@ -617,7 +562,7 @@ namespace BansheeEditor
         }
 
         /// <inheritdoc/>
-        internal override bool Refresh(Material material)
+        internal override void Refresh(Material material)
         {
             Texture value = null;
             switch (shaderParam.type)
@@ -633,13 +578,7 @@ namespace BansheeEditor
                     break;
             }
 
-            if (value != guiElem.Value)
-            {
-                guiElem.Value = value;
-                return true;
-            }
-
-            return false;
+            guiElem.Value = value;
         }
 
         /// <inheritdoc/>

+ 9 - 48
MBansheeEditor/Inspectors/MeshInspector.cs

@@ -53,58 +53,19 @@ namespace BansheeEditor
         }
 
         /// <inheritdoc/>
-        protected internal override bool Refresh()
+        protected internal override void Refresh()
         {
             MeshImportOptions newImportOptions = GetImportOptions();
 
-            bool anythingModified = false;
+            normalsField.Value = newImportOptions.ImportNormals;
+            tangentsField.Value = newImportOptions.ImportTangents;
+            skinField.Value = newImportOptions.ImportSkin;
+            blendShapesField.Value = newImportOptions.ImportBlendShapes;
+            animationField.Value = newImportOptions.ImportAnimation;
+            scaleField.Value = newImportOptions.Scale;
+            cpuReadableField.Value = newImportOptions.CPUReadable;
 
-            if (normalsField.Value != newImportOptions.ImportNormals)
-            {
-                normalsField.Value = newImportOptions.ImportNormals;
-                anythingModified = true;
-            }
-
-            if (tangentsField.Value != newImportOptions.ImportTangents)
-            {
-                tangentsField.Value = newImportOptions.ImportTangents;
-                anythingModified = true;
-            }
-
-            if (skinField.Value != newImportOptions.ImportSkin)
-            {
-                skinField.Value = newImportOptions.ImportSkin;
-                anythingModified = true;
-            }
-
-            if (blendShapesField.Value != newImportOptions.ImportBlendShapes)
-            {
-                blendShapesField.Value = newImportOptions.ImportBlendShapes;
-                anythingModified = true;
-            }
-
-            if (animationField.Value != newImportOptions.ImportAnimation)
-            {
-                animationField.Value = newImportOptions.ImportAnimation;
-                anythingModified = true;
-            }
-
-            if (scaleField.Value != newImportOptions.Scale)
-            {
-                scaleField.Value = newImportOptions.Scale;
-                anythingModified = true;
-            }
-
-            if (cpuReadableField.Value != newImportOptions.CPUReadable)
-            {
-                cpuReadableField.Value = newImportOptions.CPUReadable;
-                anythingModified = true;
-            }
-
-            if (anythingModified)
-                importOptions = newImportOptions;
-
-            return anythingModified;
+            importOptions = newImportOptions;
         }
 
 

+ 2 - 7
MBansheeEditor/Inspectors/PlainTextInspector.cs

@@ -37,13 +37,11 @@ namespace BansheeEditor
         }
 
         /// <inheritdoc/>
-        protected internal override bool Refresh()
+        protected internal override void Refresh()
         {
             PlainText plainText = referencedObject as PlainText;
             if (plainText == null)
-                return false;
-
-            bool anythingModified = false;
+                return;
 
             string newText = plainText.Text;
             string newShownText = plainText.Text.Substring(0, MathEx.Min(newText.Length, MAX_SHOWN_CHARACTERS));
@@ -52,10 +50,7 @@ namespace BansheeEditor
             {
                 textLabel.SetContent(newShownText);
                 shownText = newShownText;
-                anythingModified = true;
             }
-
-            return anythingModified;
         }
     }
 }

+ 2 - 2
MBansheeEditor/Inspectors/PrefabInspector.cs

@@ -16,9 +16,9 @@ namespace BansheeEditor
         }
 
         /// <inheritdoc/>
-        protected internal override bool Refresh()
+        protected internal override void Refresh()
         {
-            return false;
+
         }
     }
 }

+ 4 - 14
MBansheeEditor/Inspectors/RenderableInspector.cs

@@ -25,11 +25,11 @@ namespace BansheeEditor
         }
 
         /// <inheritdoc/>
-        protected internal override bool Refresh()
+        protected internal override void Refresh()
         {
             Renderable renderable = referencedObject as Renderable;
             if (renderable == null)
-                return false;
+                return;
 
             bool rebuildGUI = false;
 
@@ -61,13 +61,7 @@ namespace BansheeEditor
             if (rebuildGUI)
                 BuildGUI();
 
-            bool anythingModified = materialsField.Refresh();
-
-            if (meshField.Value != renderable.Mesh)
-            {
-                meshField.Value = renderable.Mesh;
-                anythingModified = true;
-            }
+            meshField.Value = renderable.Mesh;
 
             if (layersValue != renderable.Layers)
             {
@@ -77,8 +71,6 @@ namespace BansheeEditor
 
                 layersField.States = states;
                 layersValue = renderable.Layers;
-
-                anythingModified = true;
             }
 
             if (materials != null)
@@ -88,12 +80,10 @@ namespace BansheeEditor
                     if (materialParams[i] != null)
                     {
                         foreach (var param in materialParams[i])
-                            anythingModified |= param.Refresh(materials[i]);
+                            param.Refresh(materials[i]);
                     }
                 }
             }
-
-            return anythingModified;
         }
 
         /// <summary>

+ 3 - 12
MBansheeEditor/Inspectors/ScriptCodeInspector.cs

@@ -46,19 +46,13 @@ namespace BansheeEditor
         }
 
         /// <inheritdoc/>
-        protected internal override bool Refresh()
+        protected internal override void Refresh()
         {
             ScriptCode scriptCode = referencedObject as ScriptCode;
             if (scriptCode == null)
-                return false;
+                return;
 
-            bool anythingModified = false;
-
-            if (scriptCode.EditorScript != isEditorField.Value)
-            {
-                isEditorField.Value = scriptCode.EditorScript;
-                anythingModified = true;
-            }
+            isEditorField.Value = scriptCode.EditorScript;
 
             string newText = scriptCode.Text;
             string newShownText = scriptCode.Text.Substring(0, MathEx.Min(newText.Length, MAX_SHOWN_CHARACTERS));
@@ -67,10 +61,7 @@ namespace BansheeEditor
             {
                 textLabel.SetContent(newShownText);
                 shownText = newShownText;
-                anythingModified = true;
             }
-
-            return anythingModified;
         }
     }
 }

+ 1 - 2
MBansheeEditor/Inspectors/ShaderInspector.cs

@@ -16,9 +16,8 @@ namespace BansheeEditor
         }
 
         /// <inheritdoc/>
-        protected internal override bool Refresh()
+        protected internal override void Refresh()
         {
-            return false;
         }
     }
 }

+ 5 - 23
MBansheeEditor/Inspectors/SpriteTextureInspector.cs

@@ -44,33 +44,15 @@ namespace BansheeEditor
         }
 
         /// <inheritdoc/>
-        protected internal override bool Refresh()
+        protected internal override void Refresh()
         {
             SpriteTexture spriteTexture = referencedObject as SpriteTexture;
             if (spriteTexture == null)
-                return false;
-
-            bool anythingModified = false;
-
-            if (textureField.Value != spriteTexture.Texture)
-            {
-                textureField.Value = spriteTexture.Texture;
-                anythingModified = true;
-            }
-
-            if (offsetField.Value != spriteTexture.Offset)
-            {
-                offsetField.Value = spriteTexture.Offset;
-                anythingModified = true;
-            }
-
-            if (scaleField.Value != spriteTexture.Scale)
-            {
-                scaleField.Value = spriteTexture.Scale;
-                anythingModified = true;
-            }
+                return;
 
-            return anythingModified;
+            textureField.Value = spriteTexture.Texture;
+            offsetField.Value = spriteTexture.Offset;
+            scaleField.Value = spriteTexture.Scale;
         }
     }
 }

+ 5 - 23
MBansheeEditor/Inspectors/StringTableInspector.cs

@@ -22,21 +22,16 @@ namespace BansheeEditor
         }
 
         /// <inheritdoc/>
-        protected internal override bool Refresh()
+        protected internal override void Refresh()
         {
-            bool anythingModified = false;
-
             // Note: We're ignoring changes to the string table made externally here in order to avoid a lot of checks.
             if ((Language) languageField.Value != StringTables.ActiveLanguage)
             {
                 languageField.Value = (ulong)StringTables.ActiveLanguage;
-                anythingModified = true;
                 BuildGUI();
             }
 
-            anythingModified |= valuesField.Refresh();
-
-            return anythingModified;
+            valuesField.Refresh();
         }
 
         /// <summary>
@@ -133,23 +128,10 @@ namespace BansheeEditor
             }
 
             /// <inheritdoc/>
-            internal protected override bool Refresh(out bool rebuildGUI)
+            internal protected override bool Refresh()
             {
-                rebuildGUI = false;
-
-                string newKey = GetKey<string>();
-                if (keyField.Value != newKey)
-                {
-                    keyField.Value = newKey;
-                    return true;
-                }
-
-                string newValue = GetValue<string>();
-                if (valueField.Value != newValue)
-                {
-                    valueField.Value = newValue;
-                    return true;
-                }
+                keyField.Value = GetKey<string>();
+                valueField.Value = GetValue<string>();
 
                 return false;
             }

+ 7 - 36
MBansheeEditor/Inspectors/Texture2DInspector.cs

@@ -47,46 +47,17 @@ namespace BansheeEditor
         }
 
         /// <inheritdoc/>
-        protected internal override bool Refresh()
+        protected internal override void Refresh()
         {
             TextureImportOptions newImportOptions = GetImportOptions();
 
-            bool anythingModified = false;
+            formatField.Value = (ulong)newImportOptions.Format;
+            generateMipsField.Value = newImportOptions.GenerateMipmaps;
+            maximumMipsField.Value = newImportOptions.MaxMipmapLevel;
+            srgbField.Value = newImportOptions.IsSRGB;
+            cpuReadableField.Value = newImportOptions.CPUReadable;
 
-            if (formatField.Value != (ulong)newImportOptions.Format)
-            {
-                formatField.Value = (ulong)newImportOptions.Format;
-                anythingModified = true;
-            }
-
-            if (generateMipsField.Value != newImportOptions.GenerateMipmaps)
-            {
-                generateMipsField.Value = newImportOptions.GenerateMipmaps;
-                anythingModified = true;
-            }
-
-            if (maximumMipsField.Value != newImportOptions.MaxMipmapLevel)
-            {
-                maximumMipsField.Value = newImportOptions.MaxMipmapLevel;
-                anythingModified = true;
-            }
-
-            if (srgbField.Value != newImportOptions.IsSRGB)
-            {
-                srgbField.Value = newImportOptions.IsSRGB;
-                anythingModified = true;
-            }
-
-            if (cpuReadableField.Value != newImportOptions.CPUReadable)
-            {
-                cpuReadableField.Value = newImportOptions.CPUReadable;
-                anythingModified = true;
-            }
-
-            if (anythingModified)
-                importOptions = newImportOptions;
-
-            return anythingModified;
+            importOptions = newImportOptions;
         }
 
         /// <summary>

+ 6 - 0
SBansheeEditor/Source/BsGUIGameObjectField.cpp

@@ -175,11 +175,17 @@ namespace BansheeEngine
 	{
 		if(value)
 		{
+			if (mInstanceId == value.getInstanceId())
+				return;
+
 			mInstanceId = value->getInstanceId();
 			mDropButton->setContent(GUIContent(HString(toWString(value->getName()) + L" (" + toWString(mType) + L")")));
 		}
 		else
 		{
+			if (mInstanceId == 0)
+				return;
+
 			mInstanceId = 0;
 			mDropButton->setContent(GUIContent(HString(L"None (" + toWString(mType) + L")")));
 		}

+ 6 - 0
SBansheeEditor/Source/BsGUIResourceField.cpp

@@ -193,6 +193,9 @@ namespace BansheeEngine
 				setUUID(value.getUUID());
 			else // A non-project library resource
 			{
+				if (mUUID == value.getUUID())
+					return;
+
 				mUUID = value.getUUID();
 
 				WString title = value->getName() + L" (" + toWString(mType) + L")";
@@ -207,6 +210,9 @@ namespace BansheeEngine
 
 	void GUIResourceField::setUUID(const String& uuid)
 	{ 
+		if (mUUID == uuid)
+			return;
+
 		mUUID = uuid;
 
 		Path resPath = gProjectLibrary().uuidToPath(mUUID);

+ 3 - 0
SBansheeEditor/Source/BsGUITextureField.cpp

@@ -182,6 +182,9 @@ namespace BansheeEngine
 
 	void GUITextureField::setUUID(const String& uuid)
 	{
+		if (mUUID == uuid)
+			return;
+
 		mUUID = uuid;
 
 		HTexture texture;

+ 0 - 1
TODO.txt

@@ -56,7 +56,6 @@ Ribek use:
  - Default material has no shader. What shader to assign to default materials?
  - When I'm directly editing a resource like material, I need to save it after editing is done. Use the "dirty" system for that?
  - Hook up color picker to guicolor field
- - Resource inspectors for: Shader, GUISkin, StringTable
  - Test release mode
 
 Other polish: