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); } } } } }