New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Rediscuss the "hidden" proposal from NXP #112
Comments
@mdortel-stm, @EmmanuelGrandin: what do you think ? |
Hi @fred-r , |
In fact the proposal is to say that rather than implementing a logic in the tool based on some heuristics, a pack designer can give an indication to the tool based on his knowledge of his components. Basically I want something to tell the tool : if you need to "lighten" your UI, this component is less important than the others. |
Point from Evgueni:
In my opinion, this should be an IDE strategy. |
Then, as already mentioned, it is entirely IDE responsibility. |
Agree about the rendering but not about the decision making to decide if a component is important or not. |
What if a required component is located in another pack, such as CMSIS Core or CMSIS RTOS or a board-specific driver, who is then the pack designer? |
Let's take the example of an OS provider. And the designer of an application pack using it could say: So the IDE may do |
Why porting layer is not mandatory to be displayed? |
Because it is only some "glue", it has no role in the project except porting an API on top of a specific implementation. |
I suggest that we add a boolean component attribute named "hidden" to the specification to allow us to experiment with it. |
Agree with the approach but can't we find a better name than "hidden" ? |
I want to make sure we are clear that there is no "functional implication" other than not listing/displaying the component, right. |
At the origin, @ReinhardKeil did an interesting suggestion which mas focused on business logic and was the notion of "inherent" component (kind of synonym of induced here). Such component should be considered as selected as soon as another component using it is selected by the user. |
Ok, then maybe we could call it: |
It requires the following:
|
I think that a component can be "auxiliary" even if the selection comes from the user. |
I vote for:
|
Yes, and we specify that this attribute is meant for rendering purpose only. |
Could someone tell me what to do in the following situation:
RTE combines those components in a single aggregate to allow user to select its version similar: a newer pack adds several Cvariant components with hidden="1", or even with different "hidden" flags. |
If the "hidden" attribute conflicts (different settings), it would be considered as "hidden=0" |
Which means for Device.Startup components it is always "0" because already existing components would have hidden="0" by default. |
Unclear to me, for me:
Why conflicting here ? |
The conflict arises if you change either pack or component version (the latter you can't if component is hidden) |
Ok, I see. In this case, the IDE must offer the possibility to have the "full" rendering or "minimal" rendering. So I would expect IDEs to solve it like this, it is not a spec issue |
I still think that the "hidden" wording is too strong. Indeed the rendering startegy can then be very different from one IDE to another:
To me, typical auxiliary components are for instance:
They are mandatory for the project to work but they are not part of the "use-case". Then another category is more complex.
For this situation I see 3 options:
|
SW component as used currently in NXP is just set of files typically compiled together, There is not any explicit information about provided API or other features. Some components contain common files, which are used by other components, but it is not expected to be selected directly by user during project creation. Goal of "hidden" is UI simplification. Components which only contain common files, but does not represent useful application construction feature, could be hidden. There is issue with multiple component vendors. What is "hidden" component for one vendor could be meaningful component for another. Which components should not be hidden? UI simplification could be achieved also via filtering by features (e.g. show only components with explicit API). Tool could hide unclassified sets of files without explicit features. In case #104 (comment) Automatic addition of components should be allowed only after explicit user call of auto-resolver. User should be informed in case of ambiguity. I think it might be better to use unclassified components (raw set of files) instead of "hidden". UI simplification could be done via filtering based on categories (features) like: User could decide what is desired level of abstraction (API, layers) for project construction instead of strict hidden true/false differentiation. |
Dear all, please find below the proposal made during a meeting on Friday, August 12th with NXP and STM representatives. Objective Approach
Proposed Specification Update Scope: This attribute defines the default behavior the tool should apply to decide if a component is shown or hidden at composition stage. Applicability: Applicable but with a lower priority than the end-user’s choice. If the end-user defines a display criterion (for instance, filtering all Board Support components), then the end-user’s criteria takes precedence over this attribute. Values:
Example (user flow)
|
I believe the attribute should influence the user flow a bit further:
If we agree, we should perhaps use the attribute name "auto" with optional tool behavior described above, plus the information that tools may have an option to hide components that are automatically selected. |
Hi @ReinhardKeil , I think we should not correlate too many needs. Your point is more about how to improve the conditions resolutions so that:
In my opinion:
@DavidJurajdaNXP @tcsunhao : what do you think about the requirement ? |
@fred-r |
Let's discuss tomorrow and drive this to conclusion. I agree with @mdortel-stm, and as such we should define the tool behavior for component resolution. |
I understand the point of view, but to me, the initial request is really about "simplifying the UI view for the end-user" and how a pack designer can provide information to the tool for this purpose. I think the spec already takes care of some GUI considerations to a certain extent. Regarding the selection of components : the spec specifies conditions, so defines a way to express dependencies.
I think this freedom of behavior is part of the User Experience your tool wants to offer. |
@fred-r
|
Let me put the original usage for hidden in NXP:
|
I don't really get the purpose of a documentation component in the context of a PDSC : a component is meant to be copied in a project and to bring files to compile. Do you intend to copy the documentation in the generated project? To react to your second point : |
As discussed during the OpenCMSIS forum weekly:
|
Open-CMSIS-Pack issue Open-CMSIS-Pack#112 Some components may not be presented at composition stage to avoid confusing the end-user. Nevertheless, the end-user must still be able to define his own filtering choices. Hence, the visibility attribute is a hint/recommendation from the pack designer.
see #153 |
Added new attribute "view" (https://github.com/Open-CMSIS-Pack/Open-CMSIS-Pack-Spec/pull/154/files) If this is now OK, we need to reflect it in history and schema. |
Adding optional 'view' attribute to component element, allowing the predefined values "always", "never", "maskable".
I think this point:
#104 (comment)
coming from here:
#100
is not linked to generators.
To me the point with "visible" was to say that some components can be seen as "intermediate" components.
Some IDEs may decide to hide it, some IDEs may implement more advanced strategies.
But I think it may be worth having an attribute to say that a component is not absolutely mandatory for project representation to the end-user.
The criteria to define it would depend on the Pack provider.
A typical use-case to me would be this:
Application--requires-->Middleware--requires-->Wrapper--requires-->Driver
Then probably the Wrapper has no real added-value for the end-user (because maybe the wrapper is induced by the driver we select or there is only one wrapper available).
We may decide that it is not "mandatory" to show it (but mandatory to have it in cproject.yml).
The exact behavior would remain IDE dependent, it would only be an indication from the pack designer that this component is not a "meaningful" element in a project.
So the proposal is to provide an indication when describing a component telling if this component is a "meaningful" component for a project or if it is an "enabler" component that is always used "aggregated" with more important components.
We could even think about something like:
If the condition(s) list is empty then take "induced" into account (activated).
If the condition(s) list is not empty then take "induced" into account (activated) only if at least one condition is verified (this means the addition of the component has been "induced" by the selection of a more meaningful one)
To me this is different from "user selected" because maybe the user had to make a choice even for such a component (wrapper Ethernet or wrapper WiFi for instance?).
Of course some components must not have the '"induced" tag even if they match conditions.
But, the person designing the pack knows if a component can be "induced" or not.
If induced is present and activated, then at UI level you can decide that this component is not as important as the other ones.
Any strategy of your choice can be applied (hide for instance).
@tcsunhao: FYI.
The text was updated successfully, but these errors were encountered: