Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Sirius/Tutorials/Mindstorms/PropertiesViews

< Sirius‎ | Tutorials‎ | Mindstorms
Revision as of 10:30, 17 September 2018 by Produits.obeo.fr (Talk | contribs) (Detailed script)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Properties Views

Objectives

Provide custom properties views for a modeling tool that allows the user to define the choreography of a Mindstorms robot.

  • GoForward’s properties view
    • Specific background color if Cm value is negative
    • Warning if Cm value is null
  • Rotate’s properties view
    • Random checkbox and Degrees field aligned on the same row
    • Degrees field disabled if Random is checked
    • Validation rule of type Warning, testing if Degrees is equal to 0 and Random is not checked
    • Two quick fixes on this rule to propose solutions
  • Choreography’s properties view
    • Editable list of instructions
    • Validation rule of type Error, testing if Name is already used by another Choreography at the same level

Mindstorms-5-1.png

Sirius concepts

During this step, you will mainly use these Sirius concepts:

  • Properties Views Description
    • Describes how model element are shown and edited in the Eclipse Properties Views
  • Page
    • Corresponds to a tab in the Properties View
  • Group
    • Represents a group of widgets in a tab
  • Container
    • Allows to specify alternate layouts
  • Fill Layout
    • Organizes elements inside the container either horizontally or vertically


  • Text widget
    • Represents a single line text
  • Checkbox widget
    • Represents a checkbox
  • References widget
    • Represents the value of a reference in the model


  • Property validation
    • Defines a validation rule linked to a specific widget.
  • Semantic validation
    • Define a validation rule linked to a group
  • Audit
    • Evaluates if a validation rule has been broken

Video

Watch the video (16'45)

MindstormsVideo5.png

Detailed script

Create a Properties View for GoForward instructions

  • At the root of the modeler definition create a New Properties View to define custom properties views for the instructions
    • Metamodels = mindstorms
    • Update the Page named Default Page (already created by default)
      • Domain Class = mindstorms::Instruction
      • Label Expression = General
  • Update the Group named Default Group to display and edit the cm property of GoForward
    • Id = GoForward
    • Domain Class = mindstorms::GoForward
    • Label Expression = Properties
    • Add a Text for the cm property
      • Id = CmText
      • Label Expression = Cm
      • Value Expression = feature:cm
      • Under Begin add a Set operation (set var:newValue to cm)
    • Create a Conditional Style for CmText in order to color the text background when cm is lower than 0
      • Precondition Expression = aql:self.cm<0
      • Update the Style with Background Color = MindstormsColor1


Now, if you select a GoForward instruction and enter a negative Cm value, you should see:

Mindstorms-5-2.png


  • Add a Property Validation Rule to warn the user when cm is null (useless instruction).
    • Targets = CmText
    • Id = UselessGoForward
    • Level = Warning
    • Message = This instruction is useless
    • Create an Audit
      • Audit Expression = aql:self.oclAsType(mindstorms::GoForward).cm<>0


Now, if you select a GoForward instruction and enter a null Cm value, you should see:

Mindstorms-5-3.png

Create a Properties View for Rotate instructions

  • Create a Group to display and edit the degrees and random properties of Rotate
    • Id = Rotate
    • Domain Class = mindstorms::Rotate
    • Label Expression = Properties
    • Add this new group to the Default page (Groups property on this page)
  • Create a Container to put the widgets in the same line
    • Create a Fill Layout with Orientation = HORIZONTAL
  • Add a Checkbox for the random property
    • Id = RandomCheckbox
    • Label Expression = Random
    • Value Expression = feature:random
    • Under Begin create a Set operation (set var:newValue to random)
  • Add a Text for the degrees property
    • Id = DegreesText
    • Label Expression = Degrees
    • Is Enabled Expression = aql:not self.random
    • Value Expression = feature:degrees
    • Under Begin create a Set operation (set var:newValue to degrees)


Now, if you select a Rotate instruction, the checkbox and the field should be aligned, and the check of Random should disable the Degrees field:

Mindstorms-5-4.png


  • Add a Semantic Validation Rule to warn the user when degrees is null and random is false (useless rotate instruction).
    • Id = UselessRotation
    • Level = Warning
    • Message = This instruction is useless
    • Create an Audit
      • Audit Expression = aql:self.degrees<>0 or self.random

Create a Properties View for Choreographies instructions

  • Create a Group to display and edit the name and instructions properties of Choreography
    • Id = Choreography
    • Domain Class = mindstorms::Choreography
    • Label Expression = Properties
  • Add this new Group to the Default page (Groups property on this page)
  • Add a Text for the name property
    • Id = NameText
    • Label Expression = Name
    • Value Expression = feature:name
    • Under Begin create a Set operation (set var:newValue to name)
  • Add a Reference for the instructions property
    • Id = InstructionsRef
    • Label Expression = Instructions
    • Reference Owner Expression = var:self
    • Reference Name Expression = instructions


Now, if you select a Choreography instruction, the properties view contains a list with action buttons:

Mindstorms-5-5.png


  • Add a Property Validation Rule to warn the user when the name is already used by a sibling choreography.
    • Targets = NameText
    • Id = UniqueName
    • Level = Error
    • Message = Name must be unique
    • Create an Audit
      • Audit Expression = aql:not self.siblings()->filter(mindstorms::Choreography)->collect(i|i.name)->includes(self.name)

Installing the solution

The solution of this step is provided in solution4.zip

Warning: If you delete your current design project and load the solution, you should close the sample project and reopen it, in order the new version to be taken into account

Copyright © Eclipse Foundation, Inc. All Rights Reserved.