private void DessinObjets_MouseDown(object sender, MouseEventArgs e) { #region Mode sélection multiple activé if (sélection != Rectangle.Empty) { if (sélection.Contains(e.Location)) { DéplacementMultipleEncours = true; StartBlockMovement = e.Location; origineDéplacement = e.Location; return; } else { sélection = Rectangle.Empty; DéplacementMultipleEncours = false; } } #endregion #region Recherche éléments courant Point pointInModel = ScreenToModel(e.Location); // Vérifier que le point convient if (!Screen.PrimaryScreen.Bounds.Contains(e.Location)) return; noeudCourant = TrouveNoeudCourant(pointInModel); traitCourant = TrouveTraitCourant(e.Location); #endregion if (e.Button == MouseButtons.Right) { #region Bouton droit if (noeudCourant != null) { List<string> libellés = new List<string>() { "Supprimer", "_", "Modifier" }; switch (noeudCourant.GetType().Name) { case "Noeud": break; case "Relation": libellés.Add("Editer la relation"); break; case "Entité": libellés.Add("Editer l'entité"); break; case "Association": libellés.Add("Editer l'association"); break; } ContextMenuStrip cm = new ContextMenuStrip(); foreach (string t in libellés) { if (t == "_") cm.Items.Add(new ToolStripSeparator()); else { ToolStripMenuItem suppr = new ToolStripMenuItem(t); suppr.Click += new EventHandler(traitementMenu_Click); cm.Items.Add(suppr); } } System.Diagnostics.Trace.WriteLine(noeudCourant); cm.Show(this, e.Location); } else if (traitCourant != null) { switch (traitCourant.GetType().Name) { case "Contrainte": EditionContrainte co = new EditionContrainte((Contrainte)traitCourant, (Relation)traitCourant.Source, (Relation)traitCourant.Destination); co.ShowDialog(); break; case "Lien": EditionLien eL = new EditionLien((Lien)traitCourant); eL.ShowDialog(); break; default: Parametres pa = new Parametres(traitCourant, false); pa.ShowDialog(); break; } Refresh(); } else { Parametres pa = new Parametres(this.option, useCustomDialog); pa.ShowDialog(); Refresh(); } #endregion } else if (e.Button == MouseButtons.Left) { #region Bouton gauche if (déplacement.Checked) { if (noeudCourant != null) { #region Déplacement Simple Déplacement_Simple = true; origineDéplacement = pointInModel; StartBlockMovement = e.Location; #endregion } else { #region Déplacement multiple if (sélection != Rectangle.Empty) { if (sélection.Contains(e.Location)) { selectedNodes = new List<Noeud>(); } } else { sélection = new Rectangle(e.Location, new Size(0, 0)); selectedNodes = new List<Noeud>(); } #endregion } } else { #region mode dessin if (noeudCourant == null) { Noeud nouv = null; nouv = NoeudParDéfaut(pointInModel, Option.Type_schéma); if (nouv != null) { PushUndo(new Action(Type_Action.Créer, new List<object>() { nouv })); } } else { dessinTrait = true; } #endregion } Refresh(); #endregion } }