using DevExpress.XtraBars; using DevExpress.XtraBars.Docking; using DevExpress.XtraBars.Docking2010.Views.Tabbed; using DevExpress.XtraBars.Localization; using DevExpress.XtraBars.Ribbon; using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Controls; using ESRI.ArcGIS.Display; using KGIS.Framework.Core.Services; using KGIS.Framework.DevLocalizationCHS; using KGIS.Framework.Maps; using KGIS.Framework.Platform; using KGIS.Framework.Utils; using Kingo.PluginServiceInterface; using System; using System.Configuration; using System.Drawing; using System.Windows.Forms; using UIShell.OSGi; namespace Kingo.PlatformPlugin { public partial class FrmMain : RibbonForm, KGIS.Framework.Platform.Interface.IProgress, IFormMain { private static FrmMain _mainForm; public RibbonControl RibControl { get; private set; } public DockManager dockManager { get; private set; } public TabbedView tabbedView { get; private set; } public BarEditItem WorkPath { get; private set; } private Timer timerResize = new Timer(); private Timer LicTimer = new Timer(); public static FrmMain GetInstance(IBundleContext context) { return _mainForm ?? (_mainForm = new FrmMain()); } public FrmMain() { InitializeComponent(); string SystemName = "数 据"; switch (Platform.Instance.SystemType) { case SystemTypeEnum.DTBJK: SystemName = "单 图 斑"; break; case SystemTypeEnum.YCLJK: SystemName = "图斑预处理"; break; case SystemTypeEnum.WYZS: SystemName = "单图斑质检"; break; case SystemTypeEnum.RCBGJK: SystemName = "日 常 变 更"; break; case SystemTypeEnum.NDBGJK: SystemName = "年 度 变 更"; break; } RibControl = rbMenuCtrl; dockManager = dockManager1; tabbedView = tabbedView1; WorkPath = workPath; rbMenuCtrl.ApplicationDocumentCaption = string.Format(ConfigurationManager.AppSettings.Get("APPName"), SystemName).Replace(" ", ""); this.Text = ""; Platform.Instance.Progress = this; } private void FrmMain_Load(object sender, EventArgs e) { timerResize.Interval = 1000; timerResize.Tick += TimerResize_Tick; timerResize.Start(); if (RunIDService2.Instance.ExpirationTime != null) { TimeSpan ts = ((DateTime)RunIDService2.Instance.ExpirationTime).Subtract(DateTime.Now); licState.EditValue = string.Format("剩余{0}天{1}小时{2}分到期!", ts.Days, ts.Hours, ts.Minutes); } LicTimer.Interval = 60000;// 300000; LicTimer.Tick += (s, e1) => { this.Invoke((Action)delegate () { string jkrjSQ = System.IO.Path.Combine(SysAppPath.GetCurrentAppPath(), "jkrj.lic"); if (System.IO.File.Exists(jkrjSQ) && RunIDService2.Instance.UpdateLic()) { licState.BeginUpdate(); if (RunIDService2.Instance.ExpirationTime != null) { TimeSpan ts = ((DateTime)RunIDService2.Instance.ExpirationTime).Subtract(DateTime.Now); licState.EditValue = string.Format("剩余{0}天{1}小时{2}分到期!", ts.Days, ts.Hours, ts.Minutes); } else { licState.EditValue = "未授权"; MessageBox.Show("软件授权验证未通过,程序即将退出!"); EngineEditor editor = new EngineEditorClass(); if (editor.EditState == esriEngineEditState.esriEngineStateEditing) { editor.StopEditing(true); } Platform.Instance.SendMsg(new KGIS.Framework.Utils.Interface.NotifyMsgPackage() { MsgType = "SaveProject" }); //System.Environment.Exit(0); Application.ExitThread(); Application.Exit(); } licState.EndUpdate(); } }); }; LicTimer.Start(); this.Icon = new Icon(string.Format("{0}.ico", Platform.Instance.SystemType.ToString())); BarLocalizer.Active = new DxperienceXtraBarsLocalizationCHS(); DockManagerLocalizer.Active = new DxperienceXtraDockManagerLocalizationCHS(); DevExpress.XtraGrid.Localization.GridLocalizer.Active = new DxperienceXtraGridLocalizationCHS(); //ShowFilePath(); } private void TimerResize_Tick(object sender, EventArgs e) { timerResize.Stop(); this.OnResize(e); Platform.Instance.SendMsg(new KGIS.Framework.Utils.Interface.NotifyMsgPackage() { MsgType = "InitProject" }); ProjectInfo ProInfo = MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo; if (ProInfo != null) { if (ProInfo.ProjType == EnumProjType.BHTBTQ && Platform.Instance.SystemType != SystemTypeEnum.BGFWCG || ProInfo.ProjType != EnumProjType.BHTBTQ && Platform.Instance.SystemType == SystemTypeEnum.BGFWCG) { ClearData(); LogAPI.Debug("工程类型与当前软件类型不匹配,将会导致功能不可用,请正确打开工程类型!"); KGIS.Framework.Utils.Helper.MessageHelper.ShowError("当前工程类型与当前软件类型不匹配,将会导致一些功能不可正常使用,请重新正确打开工程类型!"); return; } } if (ProInfo != null && ProInfo.ProjType == EnumProjType.BHTBTQ && Platform.Instance.SystemType == SystemTypeEnum.BGFWCG) { //添加作业区标注 MarkLayer(); IUcZYQMagrHelper ucZYQMagrHelper = BundleRuntime.Instance.GetFirstOrDefaultService(); if (ucZYQMagrHelper != null) { ucZYQMagrHelper.UpdataData(); } IUcMulitMapControlHelper ucMulitMapControlHelper = BundleRuntime.Instance.GetFirstOrDefaultService(); if (ucMulitMapControlHelper != null) { ucMulitMapControlHelper.InitView(); ucMulitMapControlHelper.MarkLabelLayer(); if (ucMulitMapControlHelper.CurrentGeometry != null && !ucMulitMapControlHelper.CurrentGeometry.IsEmpty) ucMulitMapControlHelper.SetMask(ucMulitMapControlHelper.CurrentGeometry); } } } private void ClearData() { MapsManager.Instance.MapService.getAxMapControl().ClearLayers(); if (Platform.Instance.SystemType == SystemTypeEnum.BGFWCG) { IUcZYQMagrHelper ucZYQMagrHelper = BundleRuntime.Instance.GetFirstOrDefaultService(); if (ucZYQMagrHelper != null) { ucZYQMagrHelper.ClearData(); } IUcMulitMapControlHelper ucMulitMapControlHelper = BundleRuntime.Instance.GetFirstOrDefaultService(); if (ucMulitMapControlHelper != null) { ucMulitMapControlHelper.ClearData(); } } } private void MarkLayer() { try { IFeatureLayer pFeatureLayer = MapsManager.Instance.MapService.GetFeatureLayerByName("ZYQ"); if (pFeatureLayer == null) return; IGeoFeatureLayer pGeoLayer = pFeatureLayer as IGeoFeatureLayer; IRgbColor pColor = new RgbColorClass() { Red = 85, Blue = 105, Green = 255 }; stdole.IFontDisp pFont = new stdole.StdFont() { Name = "宋体", //Bold = true } as stdole.IFontDisp; ITextSymbol pTextSymbol = new TextSymbolClass() { Color = pColor, Font = pFont, Size = 8 }; IBasicOverposterLayerProperties pBasicOverLayerPro = new BasicOverposterLayerPropertiesClass(); pBasicOverLayerPro.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolygon; pBasicOverLayerPro.GenerateUnplacedLabels = true; pBasicOverLayerPro.NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerShape; ILabelEngineLayerProperties pLableEngine = new LabelEngineLayerPropertiesClass() { Symbol = pTextSymbol, IsExpressionSimple = true }; IOverposterLayerProperties2 pOverLayerProper = pBasicOverLayerPro as IOverposterLayerProperties2; pOverLayerProper.TagUnplaced = true;//设置该属性,目的是不被其他element遮挡 pLableEngine.BasicOverposterLayerProperties = pBasicOverLayerPro; IAnnotateLayerProperties pAnnoPros = pLableEngine as IAnnotateLayerProperties; pGeoLayer.AnnotationProperties.Add(pAnnoPros); pGeoLayer.DisplayAnnotation = true; AxMapControl axMapControl1 = MapsManager.Instance.MapService.getAxMapControl(); axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewBackground, null, axMapControl1.Extent); } catch (Exception ex) { LogAPI.Debug("设置标注时发生异常,异常信息如下:" + ex); return; } } private void FrmMain_Shown(object sender, EventArgs e) { //BUG-03468 打开软件首页后,点击里面的模块后,软件首页不要放在桌面最上层 this.Activate(); } public void CloseProgressBar() { try { this.Enabled = true; if (splashScreenManager.IsSplashFormVisible) { splashScreenManager.CloseWaitForm(); splashScreenManager.WaitForSplashFormClose();//王欢 2018-11-17 splashScreenManager占用问题 } } catch (Exception ex) { LogAPI.Debug("关闭进度条异常:" + ex.Message); } } private void ShowFilePath() { try { if (System.IO.File.Exists(AppDomain.CurrentDomain.BaseDirectory + "ProjectPath.xml")) { System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument(); xmlDoc.Load(AppDomain.CurrentDomain.BaseDirectory + "ProjectPath.xml"); System.Xml.XmlNode root = xmlDoc.SelectSingleNode("Root/File"); if (root == null) return; string filePath = root.Attributes[0].Value; if (true == string.IsNullOrEmpty(filePath) || false == System.IO.File.Exists(filePath)) { return; } workPath.EditValue = System.IO.Path.GetDirectoryName(filePath); } } catch (Exception ex) { LogAPI.Debug("读取文件异常:" + ex.Message); } } public void SetWorkPath(string path) { if (!string.IsNullOrEmpty(path)) { workPath.EditValue = path; } } public void ShowProgressBar(string message = "", int CountProgress = 0, int currentProgress = 0, string caption = "提示") { } public void UpdateProgressBarMessage(string message = "", int CountProgress = 0, int currentProgress = 0, string caption = "提示") { } public void SetStateMsg(string pMsg) { // string.Format("X:{0:F3} Y:{1:F3} Unit {2}", o.mapX, o.mapY, Platform.Instance.MapsService.getAxMapControl().Map.MapUnits); toolStripStatusLabel1.Text = pMsg; } public void SetLocationInfo(string pLocation) { this.labCurrentLocation.Text = pLocation; } } }