In MDriven we have the LeftSide menu – now also accompanied by the Toolbar – to show actions that the user can perform.
The actions are of two kinds; Class-actions and ViewModel-actions (Global-Actions only show in the MainMenu).
ViewModel-actions are locally defined to the ViewModel context where they act – they get access to data by the vCurrent_ and vSelected variables in the view. This type of action is great – but if you need the same operation in other ViewModels it may be tedious to recreate the action in all these views.
For this purpose the ClassAction was introduced. ClassActions are owned by its type (its class) and it will be eligible for popping up whenever any ViewModel displays objects of that type. This is very productive since you will be able to reach the action from past as well as current ViewModels you work on without the need to manually add them. Even future ViewModels that you have not yet created will get the action if it shows objects of that type. ClassActions reach the object via the self-variable in OCL/EAL.
It turned out that even if ClassActions really pushed productivity to the max they also lacked common decency and they popped up even in places where you did not want them.
To mitigate this rude “up popping of ClassActions” we introduced the ability to opt them out from any particular level on any particular ViewModel. This ability was added many years ago and it is an important function needed to design sane and user friendly information systems – we call this concept “action opt out”.
Now however – as some clients and models has grown so big and covers so many different use-cases that it is almost unlikely that the any random ClassAction actually should show in a ViewModel only because a matching typed object is present – we must take another step to avoid decreased developer productivity due to the need to hunt for places of action opt out in existing ViewModels (that may be more than a thousand).
The new thing
To ensure developer productivity on large models we now introduce a default-opt-out option per ViewModel. What this means is that we flip the presumption that a ClassAction that fits on type is opt-in in that ViewModel and instead we set it as opt-out. This means that when you add a new ClassAction it will still be available in the matching ViewModels and Nestings but it will show as opt-out and you would need to explicitly opt it in to make it show to the user.
You turn this new behaviour on in the ViewModel editor tree. The switch does not change anything of your existing choices – but it flips what data that we actually save regarding opt in/out in the spans file – and it effects what will happen when you create new ClassActions.
You can set the value that new ViewModels should get on the packages.
If you want to set the behaviour on ALL your existing ViewModels there is a function under Extras: