import "flowchartutil.eol";

wizard CreateYesNo { 
	guard : self.isTypeOf(Model!flowchart::Decision) and self.outgoing.size() == 0
	title: "Create yes/no transitions"
	do {
		self.createTransitionTo("yes", "YesAction");
		self.createTransitionTo("no", "NoAction");
	}
}

wizard MakeBold {
  guard : self.isKindOf(Model!flowchart::Node)
  title : 'Toggle bold font'
  do {
    var node = Flowchart_diagram!Diagram.all.first.children.selectOne(c|c.element = self);
    node.bold = not node.bold;
  }
}


wizard MoveLeft {
  guard : self.isKindOf(Model!flowchart::Node)
  title : 'Move left 10 units'
  do {
    var node = Flowchart_diagram!Diagram.all.first.children.selectOne(c|c.element = self);
    node.layoutConstraint.x = node.layoutConstraint.x - 10;
  }
}

wizard FillWhite {
  guard : self.isKindOf(Model!flowchart::Node)
  title : 'Fill white'
  do {
    var node = Flowchart_diagram!Diagram.all.first.children.selectOne(c|c.element = self);
    node.fillColor = 0.parseInt("ffffff", 16);
  }
}

wizard FillRed {
  guard : self.isKindOf(Model!flowchart::Node)
  title : 'Fill red'
  do {
    var node = Flowchart_diagram!Diagram.all.first.children.selectOne(c|c.element = self);
    node.fillColor = 0.parseInt("0000ff", 16);
  }
}

wizard FillGreen {
  guard : self.isKindOf(Model!flowchart::Node)
  title : 'Fill green'
  do {
    var node = Flowchart_diagram!Diagram.all.first.children.selectOne(c|c.element = self);
    node.fillColor = 0.parseInt("00ff00", 16);
  }
}

wizard FillBlue {
  guard : self.isKindOf(Model!flowchart::Node)
  title : 'Fill blue'
  do {
    var node = Flowchart_diagram!Diagram.all.first.children.selectOne(c|c.element = self);
    node.fillColor = 0.parseInt("ff0000", 16);
  }
}

wizard TextRed {
  guard : self.isKindOf(Model!flowchart::Node)
  title : 'Text red'
  do {
    var node = Flowchart_diagram!Diagram.all.first.children.selectOne(c|c.element = self);
    node.fontColor = 0.parseInt("0000ff", 16);
  }
}

wizard TextBlack {
  guard : self.isKindOf(Model!flowchart::Node)
  title : 'Text black'
  do {
    var node = Flowchart_diagram!Diagram.all.first.children.selectOne(c|c.element = self);
    node.fontColor = 0.parseInt("000000", 16);
  }
}
