//add foreign key to this table figure
 public void addFkConstraint(RelationshipFigure r, kindOptionality optionality)
 {
     //TODO: implement more than one fk between same tables [multiple times same fk column is used].
     List<ColumnFkFigure> tmp = Model.addFkConstraint (r.StartTable.Model, optionality);
     foreach (ColumnFkFigure c in tmp) {
         this.Add (c);
     }
     OnFigureChanged (new FigureEventArgs (this, DisplayBox));
 }
 protected virtual void OnbuttonRelationshipActivated(object sender, System.EventArgs e)
 {
     RelationshipFigure rel = new RelationshipFigure ();
     _owner.Tool = new ConnectionCreationTool (_owner, rel);
 }
 public RelationshipLineTerminal(RelationshipFigure owner)
     : this(owner, 10.0, 20.0, kindRelationshipTerminal.OneMore, kindNotation.CrowsFoot, false)
 {
 }
 public override void InvokeStart(double x, double y, IDrawingView view)
 {
     if (Owner is TableFigure) {
         _clicked = !_clicked;
         TableFigure f = (TableFigure)Owner;
         if (_locator is IndexLocator) {
             //Show/Hide Indexes
             if (f.showIndexes) {
                 foreach (Index indx in f.Model.indexes) {
                     f.Remove (indx);
                 }
                 f.showIndexes = false;
             } else {
                 foreach (Index indx in f.Model.indexes) {
                     f.Add (indx);
                 }
                 f.showIndexes = true;
             }
         }
         if (_locator is TriggerLocator) {
             //Show/Hide Triggers
             if (f.showTriggers) {
                 foreach (Trigger trg in f.Model.triggers) {
                     f.Remove (trg);
                 }
                 f.showTriggers = false;
             } else {
                 foreach (Trigger trg in f.Model.triggers) {
                     f.Add (trg);
                 }
                 f.showTriggers = true;
             }
         }
         if (_locator is ColumnAddLocator){
             //Add a new column to table
             f.addNewColumn();
         }
         if (_locator is ColumnRemoveLocator){
             //Activate a state where the figure wait for the user to click a column and then delete it
             f.activateRemoveColumn();
         }
         if (_locator is ForeignKeyLocator){
             //Start Creation of Foreign Key
             RelationshipFigure rel = new RelationshipFigure ();
             f.figureCanvas.Tool = new ConnectionCreationTool (f.figureCanvas, rel);
             f.figureCanvas.Tool.MouseDown(new MouseEvent(f.figureCanvas.View,null,new Cairo.PointD(x,y)));
         }
         if (_locator is RemoveTableLocator){
             //Remove Table Selected
             f.unPopulateTable();
             //view.ToggleSelection(f);
             view.ClearSelection ();
             view.Drawing.Remove(f);
             view.Remove(f);
             List<RelationshipFigure> deleteFigures = new List<RelationshipFigure>();
             foreach ( IFigure fig in view.Drawing.FiguresEnumerator){
                     if(fig is RelationshipFigure){
                         TableFigure startTable=((fig as RelationshipFigure).StartFigure as TableFigure);
                         TableFigure endTable=((fig as RelationshipFigure).EndFigure as TableFigure);
                         if(startTable.Model.Name==f.Model.Name || endTable.Model.Name==f.Model.Name)
                             deleteFigures.Add(fig as RelationshipFigure);
                     }
                 }
             if(deleteFigures.Count>0){
                 view.ClearSelection ();
                 foreach(RelationshipFigure delRelationship in deleteFigures){
                         view.Drawing.Remove(delRelationship);
                     }
                 }
         }
     }
 }
 public RelationshipLineTerminal(RelationshipFigure owner, double lDistance, double pDistance, kindRelationshipTerminal kind, kindNotation notation, bool identifying)
     : base()
 {
     lineDistance = lDistance;
     pointDistance = pDistance;
     parent=owner;
     this.kind = kind;
     this.Identifying = identifying;
     this.notation = notation;
 }