Reptillian Posted October 26, 2021 Share Posted October 26, 2021 (edited) Let's say I have a plugin option. The plugin option should only activates if a boolean option is checked off, and any of three dropdown option. Here's what I have: propRules.Add(new ReadOnlyBoundToNameValuesRule(PropertyNames.Points,true, (PropertyNames.Use_clipboard_as_tile, false), (PropertyNames.Pretile_mode, Pretile_modeOptions.Pretile_modeOption18), (PropertyNames.Pretile_mode, Pretile_modeOptions.Pretile_modeOption21), (PropertyNames.Pretile_mode, Pretile_modeOptions.Pretile_modeOption22) )); I want PropertyNames.Point to be only activated if clipboard option is set to false, and when the dropdown option is set to any of these option. Otherwise, it is grayed out. I don't know how to explain this better, but hopefully, this gets the idea. Also, from the other thread, this always is true: propRules.Add(new ReadOnlyBoundToNameValuesRule(PropertyNames.Thickness, true, new TupleStruct<object, object>[] { new TupleStruct<object, object>(PropertyNames.Use_clipboard_as_tile, false), new TupleStruct<object, object>(PropertyNames.Pretile_mode,Pretile_modeOptions.Pretile_modeOption22) })); Edited October 26, 2021 by Reptillian Quote G'MIC Filter Developer Link to comment Share on other sites More sharing options...
MJW Posted October 26, 2021 Share Posted October 26, 2021 You want the control enabled (NOT Readonly) if (the checkbox is NOT checked) AND (any one of the three list selections is made). Therefore, you want the control disabled (Readonly) if (the checkbox is checked) OR (none of the three list selections is made). Therefore, you want the control disabled if (the checkbox is checked) OR (any of the list selections is made that's not one of the three). So the Invert flag in ReadOnlyBoundToNameValuesRule should not be set, and the list of conditions should be: Checkbox is TRUE The list-selections of all the selections EXCEPT the three for which the control should be enabled. That is, as far as I know, the only way to achieve what you want. Your current method won't work because the listed conditions in the ReadOnlyBoundToNameValuesRule call are all ORed together. For what you have, the checkbox condition would need to be ANDed to the list conditions. EDIT: Reversed checkbox state, because I misunderstood the desired state when I originally posted the comment. Quote Link to comment Share on other sites More sharing options...
Reptillian Posted October 26, 2021 Author Share Posted October 26, 2021 I do have a earlier code that works, however, it involves separate propRules. It works, however at the start, some controls are enabled until I change options and that is when behavior is correct. Changing the defaults is the easiest solution. I wanted the control if (the checkbox is not checked) AND (any one of the three list selections is made). As I'm new to indirectui as I barely use it except in rare cases, I would like a example of what you mean. Quote G'MIC Filter Developer Link to comment Share on other sites More sharing options...
MJW Posted October 26, 2021 Share Posted October 26, 2021 5 hours ago, Reptillian said: I do have a earlier code that works, however, it involves separate propRules. If I correctly interpret what you're saying, that doesn't work. You can't properly enable a control by having, say, separate checkbox and list rules. The control will be enabled and disabled by the last control that's changed, without regard to the state of the other control. EDIT: I should have been less certain in stating the exact effect of having a control enabled separately by more than one control. The conclusion in my original comment is based of an experiment I did, from which I concluded it was the last-changed control the determined the enabling or disabling. I'm not sure how careful and systematic I was, since my main objective was to find out if it it would work, not to analyze why it didn't. In any case, it didn't work how I hoped it would work -- and it can't always work the way one would wish it would work, because for some situations the enabling should be determined by ORing the enabling controls' states, and in others by ANDing them. The situation in my test case was very similar to yours, where I hoped to have a checkbox enable a group of controls, then have a list control within that group enable or disable another of those controls. Quote Link to comment Share on other sites More sharing options...
midora Posted October 26, 2021 Share Posted October 26, 2021 @MJW told the correct story ;-). Maybe try to do it step by step and write down the condition first. Too make it simple let's assume Pretile_mode can take the values mode1, mode2, mode3, mode4, mode5. mode2 and mode3 are the modes which should allow active. Points.enabled = (!Use_clipboard_as_tile && ((Pretile_mode == mode2) || (Pretile_mode == mode3)) You have to negate the condition to set the Readonly property of Points. Points.Readonly = ! (!Use_clipboard_as_tile && ((Pretile_mode == mode2) || (Pretile_mode == mode3)) Simplify the condition Points.Readonly = Use_clipboard_as_tile || ! ((Pretile_mode == mode2) || (Pretile_mode == mode3)) Points.Readonly = Use_clipboard_as_tile || ((Pretile_mode != mode2) && (Pretile_mode != mode3)) ReadOnlyBoundToNameValuesRule can only handle OR, so enumerate all modes which are not 2 or 3 Points.Readonly = Use_clipboard_as_tile || ((Pretile_mode == mode1) || (Pretile_mode == mode4) || (Pretile_mode == mode5)) Quote Link to comment Share on other sites More sharing options...
Reptillian Posted October 26, 2021 Author Share Posted October 26, 2021 I get that part, but I don't know how to write it: propRules.Add(new ReadOnlyBoundToNameValuesRule(PropertyNames.Points,false, ((PropertyNames.Use_clipboard_as_tile)||(PropertyNames.Pretile_mode, Pretile_modeOptions.Pretile_modeOption22)) )); This test code doesn't seem to work. Quote G'MIC Filter Developer Link to comment Share on other sites More sharing options...
midora Posted October 26, 2021 Share Posted October 26, 2021 Pretile_modenew ReadOnlyBoundToNameValuesRule(PropertyNames.Points, false, (PropertyNames.Use_clipboard_as_tile, true), (PropertyNames.Pretile_mode, Pretile_modeOptions.mode1), (PropertyNames.Mode, Pretile_modeOptions.mode4), (PropertyNames.Mode, Pretile_modeOptions.mode5) Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.