Skip to main content
Jump to: navigation, search

Difference between revisions of "Sirius/Tutorials/Mindstorms/PropertiesViews"

(Installing the solution)
(Detailed script)
 
Line 64: Line 64:
 
** '''Domain Class''' = <code>mindstorms::GoForward</code>
 
** '''Domain Class''' = <code>mindstorms::GoForward</code>
 
** '''Label Expression''' = <code>Properties</code>
 
** '''Label Expression''' = <code>Properties</code>
** Add a '''Text''' for the '''name''' property
+
** Add a '''Text''' for the '''cm''' property
 
*** '''Id''' = <code>CmText</code>
 
*** '''Id''' = <code>CmText</code>
 
*** '''Label Expression''' = <code>Cm</code>
 
*** '''Label Expression''' = <code>Cm</code>
Line 71: Line 71:
 
** Create a '''Conditional Style''' for '''CmText''' in order to color the text background when '''cm''' is lower than 0
 
** Create a '''Conditional Style''' for '''CmText''' in order to color the text background when '''cm''' is lower than 0
 
*** '''Precondition Expression''' = <code>aql:self.cm<0</code>
 
*** '''Precondition Expression''' = <code>aql:self.cm<0</code>
*** Create a '''Style''' with '''Background Color''' = <code>MindstormsColor1</code>
+
*** Update the '''Style''' with '''Background Color''' = <code>MindstormsColor1</code>
  
  

Latest revision as of 09:30, 17 September 2018

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

Back to the top