// Copyright (C) Stichting Deltares 2017. All rights reserved. // // This file is part of the application DAM - UI. // // DAM - UI is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // // All names, logos, and references to "Deltares" are registered trademarks of // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. 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); } } }