using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; using Deltares.Dam.Data; using Deltares.Standard; using Deltares.Standard.EventPublisher; using Deltares.Standard.Forms.DExpress; using Deltares.Standard.Forms.DExpress.ComponentWrappers; using DevExpress.XtraBars; using DevExpress.XtraTreeList; using DevExpress.XtraTreeList.Nodes; namespace Deltares.Dam.Forms { public partial class WaterBoardTreeView : TreeViewControl { private TreeListNode savedFocused; private bool needRestoreFocused; private object clickedNodeTag; public WaterBoardTreeView() { InitializeComponent(); this.TreeList.MouseUp += TreeListOnMouseUp; } private void TreeListOnMouseUp(object sender, MouseEventArgs mouseEventArgs) { var tree = sender as TreeList; if (tree == null) return; if (mouseEventArgs.Button != MouseButtons.Right || ModifierKeys != Keys.None || tree.State != TreeListState.Regular) return; Point pt = tree.PointToClient(MousePosition); TreeListHitInfo info = tree.CalcHitInfo(pt); if (info.HitInfoType == HitInfoType.Cell) { clickedNodeTag = info.Node.Tag; if (clickedNodeTag is ChildObject) { clickedNodeTag = ((ChildObject) clickedNodeTag).DataObject; } savedFocused = tree.FocusedNode; tree.FocusedNode = info.Node; needRestoreFocused = false; // selects the clicked node contextMenu.ShowPopup(MousePosition); } } private void ContextMenuOnCloseUp(object sender, EventArgs e) { if (needRestoreFocused) this.TreeList.FocusedNode = savedFocused; } private void ZoomToClicked(object sender, ItemClickEventArgs e) { var arg = clickedNodeTag as LocationJob; // too specific? if (arg == null) return; DataEventPublisher.Request("ZOOMTOSELECTION", arg); } } }