public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { position.height = StyleDeclarationInsetRenderer.HeaderHeight; SerializedProperty module = property.FindPropertyRelative("Module"); _insetRenderer.Error = string.IsNullOrEmpty(module.stringValue) ? "Style module not defined" : null; SerializedProperty type = property.FindPropertyRelative("Type"); SerializedProperty classname = property.FindPropertyRelative("Class"); SerializedProperty id = property.FindPropertyRelative("Id"); var selectorString = StyleSelector.BuildString(type.stringValue, classname.stringValue, id.stringValue); var title = selectorString; SerializedProperty mediaQueries = property.FindPropertyRelative("MediaQueries"); int size = mediaQueries.arraySize; if (size > 0) { /*var mkList = new System.Collections.Generic.List<string>(); * for (int i = 0; i < size; i++) * { * var query = mediaQueries.GetArrayElementAtIndex(i).FindPropertyRelative("Name").stringValue; * mkList.Add(query); * }*/ //title += string.Format(" @media {0}", string.Join(", ", mkList.ToArray())); title += string.Format(" @media"); } var isScanning = EditorSettings.LiveStyling && Application.isPlaying; var passed = 0 == size || !isScanning; if (!passed) { // let's assume it will pass passed = true; // loop thgough each query for (int i = 0; i < size; i++) { var query = mediaQueries.GetArrayElementAtIndex(i); var name = query.FindPropertyRelative("Name").stringValue; var value = SerializedPropertyHelper.Read(query); //Debug.Log("value: " + value); passed = MediaQueryManager.Instance.EvaluateQuery(name, value); // when a single query doesn't pass, break the loop if (!passed) { break; } } //GUI.backgroundColor = mediaQueryPasses ? Color.green : Color.red; } _insetRenderer.MediaQueriesPassed = passed; CurrentType = type.stringValue; Rect pos2 = new Rect(position.x, position.y, position.width, property.isExpanded ? GetPropertyHeight(property, label) : position.height); /*label = */ EditorGUI.BeginProperty(position, label, property); property.isExpanded = _insetRenderer.RenderStart(pos2, title, property.isExpanded); EditorGUI.EndProperty(); if (!property.isExpanded) { return; } position.y += StyleDeclarationInsetRenderer.HeaderHeight; if (!eDrivenStyleSheetEditor.EditorLocked) { position.y += ToolbarHeight; } position.width -= BorderMetrics.Right; //EditorGUI.indentLevel += 1; position.x += BorderMetrics.Left; /** * 1. Render media queries * */ var numberOfMediaQueries = RenderMediaQueries(ref position, property); /** * 2. Render properties * */ var numberOfProperties = RenderProperties(position, property); /*if (Event.current.type == EventType.ValidateCommand) * { * Debug.Log(Event.current.type); * }*/ /*var isUndo = Event.current.type == EventType.ValidateCommand && * Event.current.commandName == "UndoRedoPerformed";*/ if (GUI.changed /* || isUndo*/) { eDrivenStyleSheet edss = (eDrivenStyleSheet)property.serializedObject.targetObject; StyleSheet ss = edss.StyleSheet; StyleDeclaration declaration = null; foreach (StyleDeclaration dec in ss.Declarations) { //Debug.Log(StyleSelector.BuildString(dec.Type, dec.Class, dec.Id)); /* Note: this is buggy, think about how to reference it without using the selector */ if (StyleSelector.BuildString(dec.Type, dec.Class, dec.Id) == selectorString) { //Debug.Log("Found declaration: " + dec); declaration = dec; break; } } if (null == declaration) { return; // nothing found? } /** * 1. Get old properties * */ DictionaryDelta propertiesDelta = new DictionaryDelta(); propertiesDelta.SnapshotBefore(declaration.Properties); /** * 2. Apply changes * */ var propertiesChanged = property.serializedObject.ApplyModifiedProperties(); /** * 3. Get new properties * */ propertiesDelta.SnapshotAfter(declaration.Properties); /** * 4. Process delta * */ propertiesDelta.Process(); /** * 1. Get old media queries * */ DictionaryDelta mediaQueriesDelta = new DictionaryDelta(); mediaQueriesDelta.SnapshotBefore(declaration.MediaQueries); /** * 2. Apply changes * */ var mediaQueriesChanged = property.serializedObject.ApplyModifiedProperties(); /** * 3. Get new properties * */ mediaQueriesDelta.SnapshotAfter(declaration.MediaQueries); /** * 4. Process delta * */ propertiesDelta.Process(); var selector = Selector.BuildSelector(type.stringValue, classname.stringValue, id.stringValue); var propertyCountChanged = _oldNumberOfProperties != numberOfProperties; var mediaQueryCountChanged = _oldNumberOfMediaQueries != numberOfMediaQueries; if (propertiesChanged || mediaQueriesChanged || propertyCountChanged || mediaQueryCountChanged) { var moduleId = property.FindPropertyRelative("Module").stringValue; if (string.IsNullOrEmpty(moduleId)) { Debug.Log("Module not defined (unknown module ID)"); } else { StyleModuleManager.Instance.GetModule(moduleId).UpdateStyles(selector, propertiesDelta); } if (propertyCountChanged) { _oldNumberOfProperties = numberOfProperties; } if (mediaQueryCountChanged) { _oldNumberOfMediaQueries = numberOfMediaQueries; } StyleSheetPropertyDrawer.ShouldProcessStyles = true; } GUI.changed = false; } }
public override string ToString() { return(string.Format("{0}, Properties: {1}, MediaQueries: {2}", StyleSelector.BuildString(Type, Class, Id), Properties.Length, MediaQueries.Length)); }