yasirkula / UnityRuntimeInspector

Runtime Inspector and Hierarchy solution for Unity for debugging and runtime editing purposes
MIT License
1.68k stars 135 forks source link

Added support for read-only fields #48

Open i-xt opened 2 years ago

i-xt commented 2 years ago

This PR adds support for read-only fields. A drawer can be made read-only from outside, for example in a IRuntimeInspectorCustomEditor, or via the new RuntimeInspectorReadonlyAttribute. This attribute can specify a static function, which is queried in InspectorField.Refresh() and returns whether the corresponding field or property should be rendered as read-only. If no function is supplied, members with this attribute are always considered read-only.

Of course it would be nice to also link instance methods in the attribute, but this would necessitate further code changes, because:

  1. C# doesn't allow delegates to be passed to attribute constructors, which only leaves reflection as alternative to find the method.
  2. Code that has access to the MemberInfo (InspectorField.BindTo()) to get the attribute from, doesn't have access to the instance on which to search for the method.

Let me know what you think about this implementation. If you are open for a merge, I'm happy to supply documentation.

yasirkula commented 2 years ago

I will review your pull request with great enthusiasm when I get the chance, thank you 😺

yasirkula commented 2 years ago

I've been focused on some other plugins for a couple of weeks and am still working on them so I still couldn't review the PR. Afterwards, I'll prioritize reviewing this.

yasirkula commented 2 years ago

We need to make sure that there aren't any edge cases with the text color modifications, for example when skin changes at runtime. I might ask you to only set the input fields' interactable to false and not touch the text color but I haven't decided yet. Please wait until #50 is merged. Even though that PR was created afterwards, it'll be easier to merge this PR to that one instead merging that PR to this one.