You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							358 lines
						
					
					
						
							13 KiB
						
					
					
				
			
		
		
	
	
							358 lines
						
					
					
						
							13 KiB
						
					
					
				using System; | 
						|
using System.Collections.Generic; | 
						|
using System.ComponentModel; | 
						|
using System.Drawing; | 
						|
using System.Data; | 
						|
using System.Linq; | 
						|
using System.Text; | 
						|
using System.Threading.Tasks; | 
						|
using System.Windows.Forms; | 
						|
using KGIS.Framework.Views; | 
						|
using UIShell.OSGi; | 
						|
using KGIS.Framework.Maps; | 
						|
using KGIS.Framework.AE.Interface; | 
						|
using DevExpress.XtraBars; | 
						|
using KGIS.Framework.Utils.Helper; | 
						|
using ESRI.ArcGIS.Controls; | 
						|
using ESRI.ArcGIS.Carto; | 
						|
using Kingo.Plugin.MapView.Views; | 
						|
using KGIS.Framework.Menus.Entities; | 
						|
using KGIS.Framework.Utils.ExtensionMethod; | 
						|
using KGIS.Framework.Utils; | 
						|
using KGIS.Framework.Commands; | 
						|
using KGIS.Framework.Menus.ServicesInvokes; | 
						|
using ESRI.ArcGIS.SystemUI; | 
						|
 | 
						|
namespace Kingo.Plugin.MapView | 
						|
{ | 
						|
    public partial class UCDataCatalog : UserControl, IDockPanel, IDataCatalogService | 
						|
    { | 
						|
        private ICommandManager _CmdManager; | 
						|
        private IMapService _MapService; | 
						|
        public object TocHook = null; | 
						|
        public UCDataCatalog() | 
						|
        { | 
						|
            try | 
						|
            { | 
						|
                InitializeComponent(); | 
						|
                TocHook = axTOCControl1.Object; | 
						|
                DockAreas = KGIS.Framework.Views.DockStyle.DockLeft; | 
						|
                DockWidth = 300; | 
						|
                DefaultArea = KGIS.Framework.Views.DockStyle.DockLeft; | 
						|
                ShowCloseButton = false; | 
						|
                ShowAutoHideButton = true; | 
						|
                Title = "数据目录"; | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                if (ex.Message.Contains("ActiveX")) | 
						|
                { | 
						|
                    MessageHelper.Show("ArcGIS授权服务未启动或已到期,请检查ArcGIS授权!"); | 
						|
                } | 
						|
                else | 
						|
                { | 
						|
                    MessageHelper.Show(ex.Message); | 
						|
                } | 
						|
            } | 
						|
        } | 
						|
        public UCDataCatalog(IBundleContext pContext) : this() | 
						|
        { | 
						|
            InitService(pContext); | 
						|
            axTOCControl1.OnDoubleClick += AxTOCControl1_OnDoubleClick; | 
						|
            axTOCControl1.OnMouseUp += _axTocCtrl_OnMouseUp; | 
						|
        } | 
						|
        UCLayerStyleSet view = null; | 
						|
        private void AxTOCControl1_OnDoubleClick(object sender, ESRI.ArcGIS.Controls.ITOCControlEvents_OnDoubleClickEvent e) | 
						|
        { | 
						|
            if (e.button != 1) return; | 
						|
            esriTOCControlItem item = esriTOCControlItem.esriTOCControlItemNone; | 
						|
            IBasicMap map = null; | 
						|
            ILayer layer = null; | 
						|
            object other = null; | 
						|
            object index = null; | 
						|
            this.axTOCControl1.Refresh(); | 
						|
            this.axTOCControl1.HitTest(e.x, e.y, ref item, ref map, ref layer, ref other, ref index); | 
						|
            if (item != esriTOCControlItem.esriTOCControlItemLegendClass) return; | 
						|
            if (view == null) | 
						|
            { | 
						|
                view = new UCLayerStyleSet(layer); | 
						|
                view.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen; | 
						|
                view.ShowInTaskbar = false; | 
						|
                view.Closed += (s, o) => | 
						|
                { | 
						|
                    view = null; | 
						|
                }; | 
						|
            } | 
						|
            view.ShowInMainWindow(true); | 
						|
 | 
						|
        } | 
						|
 | 
						|
        private void InitService(IBundleContext context) | 
						|
        { | 
						|
            context.AddService<IDataCatalogService>(this); | 
						|
        } | 
						|
 | 
						|
        public void InitCatalogContextMenus(IEnumerable<ContentMenuItemEntity> itemDatas) | 
						|
        { | 
						|
            InitContextMenus(itemDatas); | 
						|
        } | 
						|
 | 
						|
        public Guid ID { get; set; } | 
						|
        public KGIS.Framework.Views.DockStyle DockAreas { get; set; } | 
						|
        public Size FloatSize { get; set; } | 
						|
        public int DockWidth { get; set; } | 
						|
        public int DockHeight { get; set; } | 
						|
        public KGIS.Framework.Views.DockStyle DefaultArea { get; set; } | 
						|
        public bool ShowCloseButton { get; set; } | 
						|
        public bool ShowAutoHideButton { get; set; } | 
						|
        public string Title { get; set; } | 
						|
 | 
						|
        #region IDataCatalog接口 | 
						|
        public object TocCtrl => axTOCControl1; | 
						|
 | 
						|
        public object BarManager => barManager1; | 
						|
 | 
						|
        public object MapContextMenu => popMapMenu; | 
						|
 | 
						|
        public object GroupContextMenu => popGroupMenu; | 
						|
 | 
						|
        public object LayerContextMenu => popLayerMenu; | 
						|
        #endregion | 
						|
 | 
						|
 | 
						|
        private void _axTocCtrl_OnMouseUp(object sender, ITOCControlEvents_OnMouseUpEvent e) | 
						|
        { | 
						|
            if (e.button != 2) | 
						|
                return; | 
						|
            esriTOCControlItem item = esriTOCControlItem.esriTOCControlItemNone; | 
						|
            IBasicMap map = null; | 
						|
            ILayer layer = null; | 
						|
            object other = null; | 
						|
            object index = null; | 
						|
            axTOCControl1.Refresh(); | 
						|
            axTOCControl1.HitTest(e.x, e.y, ref item, ref map, ref layer, ref other, ref index); | 
						|
 | 
						|
            if (item == esriTOCControlItem.esriTOCControlItemNone) | 
						|
            { | 
						|
                return; | 
						|
            } | 
						|
            if (item == esriTOCControlItem.esriTOCControlItemMap) | 
						|
            { | 
						|
                axTOCControl1.SelectItem(map, null); | 
						|
            } | 
						|
            else | 
						|
            { | 
						|
                axTOCControl1.SelectItem(layer, null); | 
						|
            } | 
						|
            if (layer == null) | 
						|
            { | 
						|
                MapsManager.Instance.MapService.SetCustomProperty(map); | 
						|
            } | 
						|
            else | 
						|
            { | 
						|
                MapsManager.Instance.MapService.SetCustomProperty(layer); | 
						|
            } | 
						|
            if (item == esriTOCControlItem.esriTOCControlItemMap) | 
						|
            { | 
						|
                SetMenuEnabled(popMapMenu); | 
						|
                popMapMenu.ShowPopup(Control.MousePosition);//弹出右键菜单 | 
						|
            } | 
						|
            if (item == esriTOCControlItem.esriTOCControlItemLayer) | 
						|
            { | 
						|
                if (layer is IGroupLayer) | 
						|
                { | 
						|
                    ////图层组 | 
						|
                    SetMenuEnabled(popGroupMenu); | 
						|
                    popGroupMenu.ShowPopup(Control.MousePosition);//弹出右键菜单 | 
						|
                } | 
						|
                else | 
						|
                { | 
						|
                    SetMenuEnabled(popLayerMenu); | 
						|
                    popLayerMenu.ShowPopup(Control.MousePosition);//弹出右键菜单 | 
						|
                } | 
						|
            } | 
						|
        } | 
						|
        /// <summary> | 
						|
        /// 设置弹出菜单最新状态 | 
						|
        /// </summary> | 
						|
        /// <param name="menu"></param> | 
						|
        public void SetMenuEnabled(PopupMenu menu) | 
						|
        { | 
						|
            foreach (LinkPersistInfo menuitem in menu.LinksPersistInfo)//循环设置右键菜单启用/禁用状态 | 
						|
            { | 
						|
                if ((menuitem.Item as BarButtonItem) != null) | 
						|
                { | 
						|
                    var tmpmenu = menuitem.Item as BarButtonItem; | 
						|
                    var tmpcmd = tmpmenu.Tag; | 
						|
                    if (tmpcmd == null) return; | 
						|
                    Type type = tmpcmd.GetType(); //获取类型 | 
						|
                    try | 
						|
                    { | 
						|
                        var propertyInfo = type.GetProperty("Enabled");//获取最新启用状态 | 
						|
                        //设置菜单启用禁用 | 
						|
                        tmpmenu.Enabled = (bool)propertyInfo.GetValue(tmpcmd, null); | 
						|
 | 
						|
                        propertyInfo = type.GetProperty("Caption"); | 
						|
                        if (propertyInfo == null) return; | 
						|
                        object title = propertyInfo.GetValue(tmpcmd, null); | 
						|
                        if (title == null) continue; | 
						|
                        if (string.IsNullOrWhiteSpace(title.ToTrim())) continue; ; | 
						|
                        tmpmenu.Caption = title.ToTrim(); | 
						|
                    } | 
						|
                    catch (Exception exc) | 
						|
                    { | 
						|
                        LogAPI.Debug(exc); | 
						|
                    } | 
						|
                } | 
						|
            } | 
						|
        } | 
						|
 | 
						|
        public void InitContextMenus(IEnumerable<ContentMenuItemEntity> itemDatas) | 
						|
        { | 
						|
            if (itemDatas == null) | 
						|
                return; | 
						|
            if (_CmdManager == null) | 
						|
                _CmdManager = BundleRuntime.Instance.GetFirstOrDefaultService<ICommandManager>(); | 
						|
            if (_MapService == null) | 
						|
            { | 
						|
                _MapService = BundleRuntime.Instance.GetFirstOrDefaultService<IMapService>(); | 
						|
            } | 
						|
            foreach (var item in itemDatas) | 
						|
            { | 
						|
                BarItem barItem = DealWithCatalogContextMenus(item); | 
						|
                switch (item.ContentItemType) | 
						|
                { | 
						|
                    case "Map": | 
						|
                        popMapMenu.AddItem(barItem); | 
						|
                        break; | 
						|
                    case "Group": | 
						|
                        popGroupMenu.AddItem(barItem); | 
						|
                        break; | 
						|
                    case "Layer": | 
						|
                        popLayerMenu.AddItem(barItem); | 
						|
                        break; | 
						|
                    default: | 
						|
                        break; | 
						|
                } | 
						|
            } | 
						|
        } | 
						|
 | 
						|
        /// <summary> | 
						|
        /// 将配置列表数据加载成右击菜单项 | 
						|
        /// </summary> | 
						|
        /// <param name="pMenuItem"></param> | 
						|
        /// <returns></returns> | 
						|
        private BarItem DealWithCatalogContextMenus(ContentMenuItemEntity pMenuItem) | 
						|
        { | 
						|
            try | 
						|
            { | 
						|
                BarItem bar = null; | 
						|
                if (pMenuItem.Childs != null && pMenuItem.Childs.Count > 0) | 
						|
                { | 
						|
                    bar = new BarSubItem(); | 
						|
                    bar.Caption = pMenuItem.Name; | 
						|
                    bar.Glyph = pMenuItem.GetImage(); | 
						|
                    //创建子项 | 
						|
                    foreach (var item in pMenuItem.Childs) | 
						|
                    { | 
						|
                        BarItem subItem = DealWithCatalogContextMenus(item); | 
						|
                        (bar as BarSubItem).AddItem(subItem); | 
						|
                        barManager1.Items.Add(bar); | 
						|
                        if (ExtendMethd.JudgeIsCouldConversionStringOrHasValue(item.ParentId) == false) | 
						|
                        { | 
						|
                            switch (item.ContentItemType) | 
						|
                            { | 
						|
                                case "Map": | 
						|
                                    popMapMenu.AddItem(subItem); | 
						|
                                    break; | 
						|
                                case "Group": | 
						|
                                    popGroupMenu.AddItem(subItem); | 
						|
                                    break; | 
						|
                                case "Layer": | 
						|
                                    popLayerMenu.AddItem(subItem); | 
						|
                                    break; | 
						|
                                default: | 
						|
                                    break; | 
						|
                            } | 
						|
                        } | 
						|
                    } | 
						|
                } | 
						|
                else | 
						|
                { | 
						|
                    bar = new BarButtonItem(); | 
						|
                    bar.Caption = pMenuItem.Name; | 
						|
                    bar.ItemClick += Bar_ItemClick; | 
						|
                    bar.Glyph = pMenuItem.GetImage(); | 
						|
                    if (_CmdManager != null) | 
						|
                        bar.Tag = _CmdManager.AddCmd(pMenuItem.CommandId, pMenuItem.Bundle, null); | 
						|
                    if (bar.Tag is BaseMapMenuCommand && _MapService != null) | 
						|
                    { | 
						|
                        (bar.Tag as BaseMapMenuCommand).OnCreate(_MapService.getAxMapControl().Object); | 
						|
                    } | 
						|
                    else | 
						|
                    if (bar.Tag is ICommand && _MapService != null) | 
						|
                    { | 
						|
                        (bar.Tag as ICommand).OnCreate(_MapService.getAxMapControl().Object); | 
						|
                    } | 
						|
                    barManager1.Items.Add(bar); | 
						|
                } | 
						|
 | 
						|
                return bar; | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                LogAPI.Debug("执行 将配置列表数据加载成右击菜单项 方法时异常:" + ex + " ; "); | 
						|
                return null; | 
						|
            } | 
						|
            finally | 
						|
            { | 
						|
 | 
						|
            } | 
						|
        } | 
						|
 | 
						|
        private void Bar_ItemClick(object sender, ItemClickEventArgs e) | 
						|
        { | 
						|
            BarItem item = e.Item as BarItem; | 
						|
            if (item == null || item.Tag == null) | 
						|
            { | 
						|
                return; | 
						|
            } | 
						|
            try | 
						|
            { | 
						|
                if (item.Tag is ITool && _MapService != null) | 
						|
                { | 
						|
                    _MapService.SetCurrentTool(item.Tag); | 
						|
                } | 
						|
                else | 
						|
                if (item.Tag is BaseMapMenuCommand) | 
						|
                { | 
						|
                    CommandManagerInvoke.ExeCommand(item.Tag, null); | 
						|
                    if (item is BarCheckItem) | 
						|
                    { | 
						|
                        (item as BarCheckItem).Checked = (item.Tag as BaseMapMenuCommand).Checked; | 
						|
                    } | 
						|
                } | 
						|
                else | 
						|
                if (item.Tag is ICommand) | 
						|
                { | 
						|
                    (item.Tag as ICommand).OnClick(); | 
						|
                    if (item is BarCheckItem) | 
						|
                    { | 
						|
                        (item as BarCheckItem).Checked = (item.Tag as ICommand).Checked; | 
						|
                    } | 
						|
                } | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                LogAPI.Debug(string.Format("执行【{0}】命令异常,异常信息如下:", item.Caption)); | 
						|
                LogAPI.Debug(ex); | 
						|
                LogAPI.Debug("异常信息结束"); | 
						|
            } | 
						|
        } | 
						|
 | 
						|
        public void InitLayerTree(IMap pMap) | 
						|
        { | 
						|
            throw new NotImplementedException(); | 
						|
        } | 
						|
    } | 
						|
}
 | 
						|
 |