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.
1199 lines
45 KiB
1199 lines
45 KiB
using ESRI.ArcGIS.Controls; |
|
using KGIS.Framework.Platform; |
|
using KGIS.Framework.Utils; |
|
using KGIS.Framework.Utils.ExtensionMethod; |
|
using KGIS.Framework.Utils.Helper; |
|
using KGIS.Framework.Views; |
|
using System; |
|
using System.Collections.Generic; |
|
using System.Data; |
|
using System.IO; |
|
using System.Linq; |
|
using System.Windows; |
|
using System.Windows.Controls; |
|
using System.Windows.Input; |
|
using System.Windows.Media; |
|
using System.Windows.Media.Imaging; |
|
|
|
namespace Kingo.Plugin.MapView.Views |
|
{ |
|
/// <summary> |
|
/// BrowserLocal.xaml 的交互逻辑 |
|
/// </summary> |
|
public partial class BrowserLocal : UserControl |
|
{ |
|
private double dGridWidthNow; |
|
private bool IsFirstOpen = false; |
|
private double dGridWidthInitial = 0; |
|
private double dReduceScale = 0; |
|
private string sParentCatalogPath = ""; |
|
private string sCurrentCatalogPath = ""; |
|
private string sRootCatalogDescription = "此电脑"; |
|
private string sCurrentShowCatalogPath = ""; |
|
private bool IsRootCatalog;//当前是否是根目录展示信息(true是 false不是) |
|
|
|
public DataTable dtShow = new DataTable("浏览本地"); |
|
|
|
public event EventHandler Close; |
|
|
|
private IViewManager m_ViewManager; |
|
|
|
public List<ObjectInfo> ObjectInfoList { get; set; } |
|
public class ObjectInfo |
|
{ |
|
/// <summary> |
|
/// 显示的名称 |
|
/// </summary> |
|
public string Name { get; set; } |
|
/// <summary> |
|
/// 文件所在地址 |
|
/// </summary> |
|
public string Path { get; set; } |
|
/// <summary> |
|
/// 最近修改时间 |
|
/// </summary> |
|
public string RecentOpenDate { get; set; } |
|
/// <summary> |
|
/// 文件对应显示的图片 |
|
/// </summary> |
|
public BitmapImage FileImage { get; set; } |
|
/// <summary> |
|
/// 实际选中文件的名称 |
|
/// </summary> |
|
public string RealSelectObjectName { get; set; } |
|
/// <summary> |
|
/// 后缀名 |
|
/// </summary> |
|
public string Extension { get; set; } |
|
} |
|
|
|
public BrowserLocal() |
|
{ |
|
IsFirstOpen = true; |
|
dReduceScale = 1; |
|
InitializeComponent(); |
|
InitData(); |
|
btnBack.IsEnabled = false; |
|
btnBack.ToolTip = "无上一级目录"; |
|
IsRootCatalog = true; |
|
|
|
lbInfoTemp.Content = sRootCatalogDescription; |
|
lbInfoTemp.ToolTip = lbInfoTemp.Content; |
|
} |
|
|
|
private void RefreshGridData() |
|
{ |
|
try |
|
{ |
|
ObjectInfoList = new List<ObjectInfo>(); |
|
ObjectInfo OI = new ObjectInfo(); |
|
if (dtShow != null && dtShow.Rows.Count > 0) |
|
{ |
|
for (int i = 0; i < dtShow.Rows.Count; i++) |
|
{ |
|
OI = new ObjectInfo(); |
|
//OI.Name = GetFileShowMsg(dtShow.Rows[i]["objname"].ToString(), dtShow.Rows[i]["objpath"].ToString()); |
|
OI.Name = GetFileShowMsg(dtShow.Rows[i]["objname"].ToString(), ""); |
|
OI.Path = dtShow.Rows[i]["objpath"].ToString(); |
|
OI.RecentOpenDate = dtShow.Rows[i]["objopendate"].ToString(); |
|
OI.FileImage = GetFileBitmapImage(1); |
|
OI.RealSelectObjectName = dtShow.Rows[i]["objname"].ToString(); |
|
OI.Extension = dtShow.Rows[i]["objextension"].ToString(); |
|
|
|
ObjectInfoList.Add(OI); |
|
} |
|
} |
|
|
|
dgBrowserLocal.ItemsSource = ObjectInfoList; |
|
|
|
btnBack.IsEnabled = false; |
|
btnBack.ToolTip = "无上一级目录"; |
|
IsRootCatalog = true; |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("在 获取展示用Grid数据时失败,异常原因: " + ex + " ; "); |
|
return; |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 获取显示的图片类型(0未知 1文件夹 2文件) |
|
/// </summary> |
|
/// <param name="iImgType">获取显示的图片类型(0未知 1文件夹 2文件)</param> |
|
/// <returns></returns> |
|
private BitmapImage GetFileBitmapImage(int iImgType) |
|
{ |
|
try |
|
{ |
|
string sAppPathNowTemp = SysAppPath.GetCurrentAppPath() + "Plugins\\KGIS.Plugin.MapView\\Resources\\Tool"; |
|
if (string.IsNullOrWhiteSpace(sAppPathNowTemp) == true) |
|
{ |
|
return null; |
|
} |
|
else |
|
{ |
|
string sFolderImagePath = sAppPathNowTemp + "\\folderimg.png"; |
|
string sFileImagePath = sAppPathNowTemp + "\\fileimg.png"; |
|
if (File.Exists(sFolderImagePath) == false || File.Exists(sFileImagePath) == false) |
|
{ |
|
return null; |
|
} |
|
else |
|
{ |
|
if (iImgType == 1) |
|
{ |
|
BitmapImage bitmap = new BitmapImage(new Uri(sFolderImagePath)); |
|
return bitmap; |
|
} |
|
else// if (iImgType == 2) |
|
{ |
|
BitmapImage bitmap = new BitmapImage(new Uri(sFileImagePath)); |
|
return bitmap; |
|
} |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("获取显示的图片类型(iImgType= " + iImgType + ")时失败,异常原因: " + ex + " ; "); |
|
return null; |
|
} |
|
} |
|
|
|
private string GetFileShowMsg(string sFileName, string sPath) |
|
{ |
|
string sMark = ""; |
|
string _Path = ""; |
|
try |
|
{ |
|
if (string.IsNullOrWhiteSpace(sPath) == true) |
|
{ |
|
if (string.IsNullOrWhiteSpace(sFileName) == true) |
|
{ |
|
return ""; |
|
} |
|
else |
|
{ |
|
sMark = GetRealShowMessageByReduceScale(sFileName); |
|
return sMark; |
|
} |
|
} |
|
else |
|
{ |
|
_Path = GetFileDirectoryName(sPath); |
|
if (string.IsNullOrWhiteSpace(sFileName) == true) |
|
{ |
|
sMark = GetRealShowMessageByReduceScale(_Path); |
|
return sMark; |
|
} |
|
else |
|
{ |
|
sMark = GetRealShowMessageByReduceScale(sFileName); |
|
sMark += "\r"; |
|
sMark += GetRealShowMessageByReduceScale(_Path); |
|
return sMark; |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("获取文件展示用内容时失败,异常原因: " + ex + " ; "); |
|
return ""; |
|
} |
|
finally |
|
{ |
|
if (string.IsNullOrWhiteSpace(sMark) == false) |
|
{ |
|
sMark = ""; |
|
} |
|
if (string.IsNullOrWhiteSpace(_Path) == false) |
|
{ |
|
_Path = ""; |
|
} |
|
} |
|
} |
|
|
|
private string GetRealShowMessageByReduceScale(string sOriginalContent) |
|
{ |
|
try |
|
{ |
|
if (string.IsNullOrWhiteSpace(sOriginalContent) == true) |
|
{ |
|
return ""; |
|
} |
|
|
|
if (dReduceScale <= 0) |
|
{ |
|
return ""; |
|
} |
|
|
|
if (dReduceScale > 1) |
|
{ |
|
dReduceScale = 1; |
|
} |
|
|
|
int iLength = sOriginalContent.Length; |
|
double dTemp = iLength * dReduceScale; |
|
int iNeedLength = GetNeedLength(dTemp * 1.5); |
|
if (iNeedLength <= 0) |
|
{ |
|
iNeedLength = iLength; |
|
} |
|
|
|
if (iNeedLength >= iLength) |
|
{ |
|
return sOriginalContent; |
|
} |
|
else |
|
{ |
|
string sMark = sOriginalContent.Substring(0, iNeedLength) + "..."; |
|
return sMark; |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("按照比例获取显示内容时失败,异常原因: " + ex + " ; "); |
|
return ""; |
|
} |
|
} |
|
|
|
private int GetNeedLength(double dTemp) |
|
{ |
|
try |
|
{ |
|
return (int)dTemp;//取整数部分 |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("转化Double数(" + dTemp + ") 时失败,异常原因:" + ex + " ; "); |
|
return 0; |
|
} |
|
} |
|
|
|
private string GetFileDirectoryName(string sPath) |
|
{ |
|
try |
|
{ |
|
if (string.IsNullOrWhiteSpace(sPath) == true) |
|
{ |
|
return ""; |
|
} |
|
|
|
if (File.Exists(sPath) == false) |
|
{ |
|
return ""; |
|
} |
|
|
|
string sThePath = System.IO.Path.GetDirectoryName(sPath); |
|
return sThePath; |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("获取文件夹路径时失败,异常原因: " + ex + " ; "); |
|
return ""; |
|
} |
|
} |
|
|
|
private void InitData() |
|
{ |
|
dtShow.Columns.Add("objname", typeof(string)); |
|
dtShow.Columns.Add("objpath", typeof(string)); |
|
dtShow.Columns.Add("objopendate", typeof(string)); |
|
dtShow.Columns.Add("objextension", typeof(string)); |
|
|
|
ToRefreshGridData(); |
|
} |
|
|
|
private void ToRefreshGridData() |
|
{ |
|
DriveInfo[] diInfoList = null; |
|
try |
|
{ |
|
tbCatalog.Text = sRootCatalogDescription; |
|
if (string.IsNullOrWhiteSpace(tbCatalog.Text) == false) |
|
{ |
|
tbCatalog.SelectionStart = tbCatalog.Text.Length; |
|
} |
|
|
|
diInfoList = DriveInfo.GetDrives();//获取电脑磁盘符号 |
|
if (diInfoList == null || diInfoList.Count() <= 0) |
|
{ |
|
return; |
|
} |
|
|
|
if (dtShow != null && dtShow.Rows.Count > 0) |
|
{ |
|
dtShow.Rows.Clear(); |
|
} |
|
|
|
#region 获取 本地电脑 信息 |
|
for (int y = 0; y < diInfoList.Count(); y++) |
|
{ |
|
string name = GetLocalDeviceInfoByType_Drive(diInfoList[y], 1); |
|
if (string.IsNullOrWhiteSpace(diInfoList[y].Name.Trim()) || string.IsNullOrWhiteSpace(name.Trim())) |
|
{ |
|
continue; |
|
} |
|
dtShow.Rows.Add( |
|
new object[] { |
|
GetLocalDeviceInfoByType_Drive(diInfoList[y],1),//1获取此System.IO.DirectoryInfo实例的名称 |
|
GetLocalDeviceInfoByType_Drive(diInfoList[y],2),//2获取目录或文件的完整目录 |
|
GetLocalDeviceInfoByType_Drive(diInfoList[y],3),//3获取或设置上次访问当前文件或目录的时间 |
|
GetLocalDeviceInfoByType_Drive(diInfoList[y],4)//4获取表示文件扩展名部分的字符串 |
|
}); |
|
} |
|
#endregion |
|
|
|
RefreshGridData(); |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("获取展示用 Grid 数据期间失败,异常原因: " + ex + " ; "); |
|
return; |
|
} |
|
finally |
|
{ |
|
if (diInfoList != null) |
|
{ |
|
diInfoList = null; |
|
} |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 依据类型获取想要的信息(1获取此System.IO.DirectoryInfo实例的名称 2获取目录或文件的完整目录 3获取或设置上次访问当前文件或目录的时间 4获取表示文件扩展名部分的字符串) |
|
/// </summary> |
|
/// <param name="obj"></param> |
|
/// <param name="iNeedInfoType">想要的信息类型(1获取此System.IO.DirectoryInfo实例的名称 2获取目录或文件的完整目录 3获取或设置上次访问当前文件或目录的时间 4获取表示文件扩展名部分的字符串)</param> |
|
/// <returns></returns> |
|
private string GetLocalDeviceInfoByType_Drive(object obj, int iNeedInfoType) |
|
{ |
|
string sInfo = ""; |
|
try |
|
{ |
|
if (obj == null) |
|
{ |
|
return ""; |
|
} |
|
|
|
if ((obj is DriveInfo) == false)//DirectoryInfo |
|
{ |
|
return ""; |
|
} |
|
|
|
DriveInfo dINow = null; |
|
dINow = obj as DriveInfo; |
|
|
|
if (JudgePathType(dINow.Name) == 0) |
|
{ |
|
return ""; |
|
} |
|
|
|
DirectoryInfo di = new DirectoryInfo(dINow.Name); |
|
|
|
switch (iNeedInfoType) |
|
{ |
|
case 1: |
|
string sTemp = string.IsNullOrWhiteSpace(dINow.VolumeLabel) == false ? dINow.VolumeLabel : "本地磁盘"; |
|
sInfo = sTemp + " (" + di.Name + ") "; |
|
break; |
|
case 2: |
|
sInfo = di.FullName;//dINow.FullPath;受保护不可读取 |
|
break; |
|
case 3: |
|
if (ExtendMethd.JudgeIsCouldConversionDateTime(di.LastAccessTime) == false) |
|
{ |
|
sInfo = ""; |
|
} |
|
else |
|
{ |
|
DateTime dtTemp1 = di.LastAccessTime; |
|
sInfo = dtTemp1.Year + "-" + dtTemp1.Month + "-" + dtTemp1.Day + " " + dtTemp1.Hour + ":" + dtTemp1.Minute; |
|
} |
|
break; |
|
case 4: |
|
sInfo = di.Extension; |
|
break; |
|
default: |
|
sInfo = ""; |
|
break; |
|
} |
|
|
|
return sInfo; |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("获取 盘符 信息时失败,异常原因: " + ex + " ; "); |
|
return ""; |
|
} |
|
finally |
|
{ |
|
if (string.IsNullOrWhiteSpace(sInfo) == false) |
|
{ |
|
sInfo = ""; |
|
} |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 依据类型获取想要的信息(1获取此 System.IO.DirectoryInfo 实例的名称 2获取目录或文件的完整目录 3获取或设置上次访问当前文件或目录的时间 4获取表示文件扩展名部分的字符串) |
|
/// </summary> |
|
/// <param name="obj"></param> |
|
/// <param name="iNeedInfoType">想要的信息类型(1获取此 System.IO.DirectoryInfo 实例的名称 2获取目录或文件的完整目录 3获取或设置上次访问当前文件或目录的时间 4获取表示文件扩展名部分的字符串)</param> |
|
/// <returns></returns> |
|
private string GetLocalDeviceInfoByType_Folder(object obj, int iNeedInfoType) |
|
{ |
|
string sInfo = ""; |
|
try |
|
{ |
|
if (ExtendMethd.JudgeIsCouldConversionStringOrHasValue(obj) == false) return ""; |
|
|
|
if (JudgePathType(obj.ToString()) != 1) return ""; |
|
|
|
DirectoryInfo dir = new DirectoryInfo(obj.ToString()); |
|
|
|
switch (iNeedInfoType) |
|
{ |
|
case 1: |
|
sInfo = dir.Name; |
|
break; |
|
case 2: |
|
sInfo = dir.FullName; |
|
break; |
|
case 3: |
|
if (ExtendMethd.JudgeIsCouldConversionDateTime(dir.LastAccessTime) == false) |
|
{ |
|
sInfo = ""; |
|
} |
|
else |
|
{ |
|
DateTime dtTemp1 = dir.LastAccessTime; |
|
sInfo = dtTemp1.Year + "-" + dtTemp1.Month + "-" + dtTemp1.Day + " " + dtTemp1.Hour + ":" + dtTemp1.Minute; |
|
} |
|
break; |
|
case 4: |
|
sInfo = dir.Extension; |
|
break; |
|
default: |
|
sInfo = ""; |
|
break; |
|
} |
|
return sInfo; |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("获取 文件夹 信息时失败,异常原因: " + ex + " ; "); |
|
return ""; |
|
} |
|
finally |
|
{ |
|
if (string.IsNullOrWhiteSpace(sInfo) == false) |
|
{ |
|
sInfo = ""; |
|
} |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 依据类型获取想要的信息(1获取文件名 2获取表示目录的完整路径的字符串 3获取或设置上次访问当前文件或目录的时间 4获取表示文件扩展名部分的字符串) |
|
/// </summary> |
|
/// <param name="obj"></param> |
|
/// <param name="iNeedInfoType">想要的信息类型(1获取文件名 2获取表示目录的完整路径的字符串 3获取或设置上次访问当前文件或目录的时间 4获取表示文件扩展名部分的字符串)</param> |
|
/// <returns></returns> |
|
private string GetLocalDeviceInfoByType_File(object obj, int iNeedInfoType) |
|
{ |
|
string sInfo = ""; |
|
try |
|
{ |
|
if (ExtendMethd.JudgeIsCouldConversionStringOrHasValue(obj) == false) return ""; |
|
|
|
if (JudgePathType(obj.ToString()) != 2) return ""; |
|
|
|
FileInfo fINow = new FileInfo(obj.ToString()); |
|
|
|
if (fINow == null) |
|
{ |
|
return ""; |
|
} |
|
|
|
switch (iNeedInfoType) |
|
{ |
|
case 1: |
|
sInfo = fINow.Name; |
|
break; |
|
case 2: |
|
sInfo = fINow.DirectoryName; |
|
break; |
|
case 3: |
|
if (ExtendMethd.JudgeIsCouldConversionDateTime(fINow.LastAccessTime) == false) |
|
{ |
|
sInfo = ""; |
|
} |
|
else |
|
{ |
|
DateTime dtTemp1 = fINow.LastAccessTime; |
|
sInfo = dtTemp1.Year + "-" + dtTemp1.Month + "-" + dtTemp1.Day + " " + dtTemp1.Hour + ":" + dtTemp1.Minute; |
|
} |
|
break; |
|
case 4: |
|
sInfo = fINow.Extension; |
|
break; |
|
default: |
|
sInfo = ""; |
|
break; |
|
} |
|
return sInfo; |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("获取 文件 信息时失败,异常原因: " + ex + " ; "); |
|
return ""; |
|
} |
|
finally |
|
{ |
|
if (string.IsNullOrWhiteSpace(sInfo) == false) sInfo = ""; |
|
} |
|
} |
|
|
|
private void DgBrowserLocal_LoadingRow(object sender, DataGridRowEventArgs e) |
|
{ |
|
e.Row.MouseEnter += Row_MouseEnter; |
|
} |
|
|
|
void Row_MouseEnter(object sender, MouseEventArgs e) |
|
{ |
|
//DataGridRow row = (DataGridRow)sender; |
|
//row.ToolTip = GetPathByIndex(row.GetIndex());配置较差电脑会导致黑块 暂时移除提示 |
|
} |
|
|
|
private void DgBrowserLocal_MouseDoubleClick(object sender, MouseButtonEventArgs e) |
|
{ |
|
try |
|
{ |
|
btnBack.IsEnabled = true; |
|
btnBack.ToolTip = "返回至上一级"; |
|
IsRootCatalog = false; |
|
|
|
if (dgBrowserLocal.SelectedItem == null) |
|
{ |
|
return; |
|
} |
|
else |
|
{ |
|
ObjectInfo objInfo = dgBrowserLocal.SelectedItem as ObjectInfo; |
|
if (objInfo == null) |
|
{ |
|
return; |
|
} |
|
else |
|
{ |
|
if (ExtendMethd.JudgeIsCouldConversionStringOrHasValue(objInfo.Path) == false) |
|
{ |
|
LogAPI.Debug("浏览本地操作期间双击选中项后 Path 信息获取失败"); |
|
MessageBox.Show("信息获取失败"); |
|
return; |
|
} |
|
|
|
if (ExtendMethd.JudgeIsCouldConversionStringOrHasValue(objInfo.RealSelectObjectName) == false) |
|
{ |
|
LogAPI.Debug("浏览本地操作期间双击选中项后 RealSelectObjectName 信息获取失败,地址为:" + objInfo.Path + " ; "); |
|
MessageBox.Show("信息获取失败"); |
|
return; |
|
} |
|
|
|
string sCurrentPathTemp = ""; |
|
|
|
if (objInfo.Extension == null) |
|
{ |
|
sCurrentPathTemp = objInfo.Path; |
|
RefreshBrowserLocalDataGrid(objInfo.Path); |
|
} |
|
else |
|
{ |
|
if (string.IsNullOrWhiteSpace(objInfo.Extension) == true) |
|
{ |
|
sCurrentPathTemp = objInfo.Path; |
|
RefreshBrowserLocalDataGrid(objInfo.Path); |
|
} |
|
else |
|
{ |
|
//打开工程 |
|
string sThePathNow = objInfo.Path + "\\" + objInfo.RealSelectObjectName; |
|
if (File.Exists(sThePathNow) == false) |
|
{ |
|
sCurrentPathTemp = ""; |
|
LogAPI.Debug("未能找到路径为 " + sThePathNow + " 的文件或者文件夹命名不要包含‘.’"); |
|
MessageBox.Show("未能找到路径为 " + sThePathNow + " 的文件或者文件夹命名不要包含‘.’"); |
|
return; |
|
} |
|
else |
|
{ |
|
sCurrentPathTemp = sThePathNow; |
|
OpenProject(sThePathNow); |
|
KGIS.Framework.Maps.MapsManager.Instance.MapService.SetFolderPath(objInfo.Path);//获取工作目录路径 |
|
Platform.Instance.ViewManager.SetFilePath(objInfo.Path); |
|
} |
|
} |
|
} |
|
SetParentCatalogPath(sCurrentPathTemp); |
|
tbCatalog.Text = string.IsNullOrWhiteSpace(sCurrentPathTemp) == false ? sCurrentPathTemp.Replace("\\", " > ") : " "; |
|
sCurrentShowCatalogPath = tbCatalog.Text; |
|
lbInfoTemp.Content = tbCatalog.Text; |
|
lbInfoTemp.ToolTip = lbInfoTemp.Content; |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("双击浏览文本地电脑文件地址时失败,异常原因:" + ex + " ; "); |
|
return; |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 获取父级目录地址 |
|
/// </summary> |
|
/// <param name="sCurrentPath"></param> |
|
private void SetParentCatalogPath(string sCurrentPath) |
|
{ |
|
DirectoryInfo lastLevel_DirectoryInfo = null; |
|
try |
|
{ |
|
#region 获取上一级目录地址 |
|
if (string.IsNullOrWhiteSpace(sCurrentPath) == true) |
|
{ |
|
LogAPI.Debug("获取父级目录地址失败,原因:当前选择的文件 当前所在目录 信息获取失败"); |
|
return; |
|
} |
|
|
|
lastLevel_DirectoryInfo = Directory.GetParent(sCurrentPath); |
|
if (lastLevel_DirectoryInfo == null)//第一级系统盘符的情况 |
|
{ |
|
sParentCatalogPath = ""; |
|
} |
|
else |
|
{ |
|
sParentCatalogPath = lastLevel_DirectoryInfo.FullName; |
|
} |
|
|
|
//if (string.IsNullOrWhiteSpace(sParentCatalogPath) == false) |
|
//{ |
|
// btnBack.IsEnabled = true; |
|
//} |
|
//else |
|
//{ |
|
// btnBack.IsEnabled = false; |
|
//} |
|
|
|
//LogAPI.Debug("上一级目录 地址 现为: " + sParentCatalogPath + " ; "); |
|
#endregion |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("获取父级目录地址失败,\r"); |
|
LogAPI.Debug("当前所选文件所在地址: " + sCurrentPath + " \r"); |
|
LogAPI.Debug("原因: " + ex + " ; "); |
|
sParentCatalogPath = ""; |
|
return; |
|
} |
|
finally |
|
{ |
|
if (string.IsNullOrWhiteSpace(sCurrentPath) == false) |
|
{ |
|
sCurrentPath = ""; |
|
} |
|
if (lastLevel_DirectoryInfo != null) |
|
{ |
|
lastLevel_DirectoryInfo = null; |
|
} |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 打开工程操作 |
|
/// </summary> |
|
/// <param name="sPath"></param> |
|
private void OpenProject(string sPath) |
|
{ |
|
string sProjectPath = ""; |
|
|
|
try |
|
{ |
|
EngineEditorClass engineEditorClass = new EngineEditorClass(); |
|
if (engineEditorClass.EditState != esriEngineEditState.esriEngineStateNotEditing) |
|
{ |
|
MessageHelper.ShowTips("当前工程正处于编辑状态,打开工程之前请先结束编辑!"); |
|
this.Close?.Invoke(null, null); |
|
return; |
|
} |
|
|
|
sProjectPath = sPath; |
|
if (string.IsNullOrWhiteSpace(sProjectPath) == true) |
|
{ |
|
return; |
|
} |
|
string prjType = ".KBG"; |
|
switch (Platform.Instance.SystemType) |
|
{ |
|
case SystemTypeEnum.NDBGJK: |
|
prjType = ".KBG"; |
|
break; |
|
case SystemTypeEnum.WYZS: |
|
prjType = ".KBG"; |
|
break; |
|
case SystemTypeEnum.TBBG: |
|
prjType = ".KAP"; |
|
break; |
|
case SystemTypeEnum.DTBJK: |
|
prjType = ".KBG"; |
|
break; |
|
case SystemTypeEnum.YCLJK: |
|
prjType = ".KBG"; |
|
break; |
|
default: |
|
break; |
|
} |
|
//打开文件是否与当前应用程序相符 |
|
if (prjType.ToLower() != System.IO.Path.GetExtension(sProjectPath).ToLower()) |
|
{ |
|
MessageHelper.ShowError("与当前工程文件不符,请选择正确文件!"); |
|
return; |
|
} |
|
if (File.Exists(sProjectPath) == false) |
|
{ |
|
LogAPI.Debug("未能找到 地址为 " + sProjectPath + " 的 KBG工程文件。"); |
|
return; |
|
} |
|
else |
|
{ |
|
//切换前关闭所有的未关闭的窗体 |
|
m_ViewManager = Platform.Instance.ViewManager; |
|
m_ViewManager.CloseAllDocument(); |
|
m_ViewManager.CloseAllPanel(); |
|
KGIS.Framework.Maps.MapsManager.Instance.MapService.LoadProject(sProjectPath);//打开工程 |
|
this.Close?.Invoke(null, null); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("在点击打开最近工程时失败,KBG工程文件地址: " + sProjectPath + ", 原因:" + ex + " ; "); |
|
MessageHelper.ShowError("工程打开 失败"); |
|
return; |
|
} |
|
finally |
|
{ |
|
if (string.IsNullOrWhiteSpace(sProjectPath) == false) |
|
sProjectPath = ""; |
|
} |
|
} |
|
|
|
private void RefreshBrowserLocalDataGrid(string sPath) |
|
{ |
|
try |
|
{ |
|
dgBrowserLocal.ItemsSource = null; |
|
|
|
if (string.IsNullOrWhiteSpace(sPath) == true) |
|
{ |
|
return; |
|
} |
|
|
|
int iObjectType = JudgePathType(sPath); |
|
if (iObjectType == 0 || iObjectType == 2) |
|
{ |
|
return; |
|
} |
|
else if (iObjectType == 1) |
|
{ |
|
#region 点开了 文件夹 |
|
List<string> AllNeedValidPathList = new List<string>(); |
|
|
|
List<string> ValidPathList = new List<string>(); |
|
|
|
string[] ArrayDirectories = System.IO.Directory.GetDirectories(sPath); |
|
if (ArrayDirectories != null && ArrayDirectories.Count() > 0) |
|
{ |
|
for (int i = 0; i < ArrayDirectories.Count(); i++) |
|
{ |
|
if (JudgeDirectoryIsNeedShow(ArrayDirectories[i]) == true) |
|
{ |
|
ValidPathList.Add(ArrayDirectories[i]); |
|
} |
|
} |
|
} |
|
AllNeedValidPathList = ValidPathList; |
|
string prjType = "*.KAP"; |
|
switch (Platform.Instance.SystemType) |
|
{ |
|
case SystemTypeEnum.NDBGJK: |
|
prjType = "*.KBG"; |
|
break; |
|
case SystemTypeEnum.BGFWCG: |
|
prjType = "*.prj"; |
|
break; |
|
case SystemTypeEnum.TBBG: |
|
prjType = "*.KAP"; |
|
break; |
|
default: |
|
break; |
|
} |
|
string[] ArrayKBGFiles = System.IO.Directory.GetFiles(sPath, prjType); |
|
List<String> listKBGFiles = new List<string>(ArrayKBGFiles); |
|
for (int j = 0; j < listKBGFiles.Count; j++) |
|
{ |
|
AllNeedValidPathList.Add(listKBGFiles[j]); |
|
} |
|
|
|
ObjectInfoList = new List<ObjectInfo>(); |
|
ObjectInfo OI = new ObjectInfo(); |
|
int iPathTypeNow = 0; |
|
string sNameTemp = ""; |
|
string sDirectoryNameTemp = ""; |
|
string sLastAccessTimeTemp = ""; |
|
string sExtension = ""; |
|
for (int k = 0; k < AllNeedValidPathList.Count; k++) |
|
{ |
|
iPathTypeNow = JudgePathType(AllNeedValidPathList[k]); |
|
if (iPathTypeNow == 0) |
|
{ |
|
continue; |
|
} |
|
else |
|
{ |
|
sNameTemp = ""; |
|
sDirectoryNameTemp = ""; |
|
sLastAccessTimeTemp = ""; |
|
OI = new ObjectInfo(); |
|
if (iPathTypeNow == 1)//文件夹 |
|
{ |
|
OI.FileImage = GetFileBitmapImage(1); |
|
sNameTemp = GetLocalDeviceInfoByType_Folder(AllNeedValidPathList[k], 1); |
|
sDirectoryNameTemp = GetLocalDeviceInfoByType_Folder(AllNeedValidPathList[k], 2); |
|
sLastAccessTimeTemp = GetLocalDeviceInfoByType_Folder(AllNeedValidPathList[k], 3); |
|
sExtension = GetLocalDeviceInfoByType_Folder(AllNeedValidPathList[k], 4); |
|
} |
|
else if (iPathTypeNow == 2)//文件 |
|
{ |
|
OI.FileImage = GetFileBitmapImage(2); |
|
sNameTemp = GetLocalDeviceInfoByType_File(AllNeedValidPathList[k], 1); |
|
sDirectoryNameTemp = GetLocalDeviceInfoByType_File(AllNeedValidPathList[k], 2); |
|
sLastAccessTimeTemp = GetLocalDeviceInfoByType_File(AllNeedValidPathList[k], 3); |
|
sExtension = GetLocalDeviceInfoByType_File(AllNeedValidPathList[k], 4); |
|
} |
|
else |
|
{ |
|
OI.FileImage = GetFileBitmapImage(0); |
|
} |
|
OI.Name = GetFileShowMsg(sNameTemp, ""); |
|
OI.Path = sDirectoryNameTemp; |
|
OI.RecentOpenDate = sLastAccessTimeTemp; |
|
OI.RealSelectObjectName = sNameTemp; |
|
OI.Extension = sExtension; |
|
ObjectInfoList.Add(OI); |
|
} |
|
} |
|
dgBrowserLocal.ItemsSource = ObjectInfoList; |
|
btnBack.IsEnabled = true; |
|
btnBack.ToolTip = "返回至上一级";//无上一级目录 |
|
IsRootCatalog = false; |
|
#endregion |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("更新 浏览本地 文件资源时失败,异常原因:" + ex + " ; "); |
|
return; |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 依据路径判断类型(0未知 1文件夹 2文件) |
|
/// </summary> |
|
/// <param name="sPath"></param> |
|
/// <returns></returns> |
|
private int JudgePathType(string sPath) |
|
{ |
|
try |
|
{ |
|
if (string.IsNullOrWhiteSpace(sPath) == true) |
|
{ |
|
return 0; |
|
} |
|
|
|
string path = sPath;//@"D:\aaa"; |
|
if (Directory.Exists(path)) |
|
{ |
|
return 1; |
|
} |
|
else |
|
{ |
|
if (File.Exists(path)) |
|
{ |
|
return 2; |
|
} |
|
else |
|
{ |
|
LogAPI.Debug("路径(" + sPath + ")判断时验证为无效。 "); |
|
return 0; |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("依据路径(" + sPath + ")判断类型失败,异常原因: " + ex + " ; "); |
|
return 0; |
|
} |
|
finally |
|
{ |
|
if (string.IsNullOrWhiteSpace(sPath) == false) sPath = ""; |
|
} |
|
} |
|
|
|
private bool JudgeDirectoryIsNeedShow(string sPath) |
|
{ |
|
try |
|
{ |
|
if (string.IsNullOrWhiteSpace(sPath) == true) |
|
{ |
|
return false; |
|
} |
|
|
|
DirectoryInfo di = new DirectoryInfo(sPath); |
|
if ((di.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden) |
|
{//为隐藏的 |
|
return false; |
|
} |
|
else |
|
{ |
|
return true; |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("判断目录地址 (" + sPath + ") 是否需要显示 失败,异常原因: " + ex + " ; "); |
|
return false; |
|
} |
|
} |
|
|
|
private void DgBrowserLocal_SizeChanged(object sender, SizeChangedEventArgs e) |
|
{ |
|
|
|
} |
|
|
|
private void BtnBack_Click(object sender, RoutedEventArgs e) |
|
{ |
|
try |
|
{ |
|
if (string.IsNullOrWhiteSpace(sParentCatalogPath) == true) |
|
{ |
|
//MessageBox.Show("上一级地址信息获取失败。"); |
|
ToRefreshGridData();//将第一级盘符列表信息刷新显示 |
|
} |
|
else |
|
{ |
|
tbCatalog.Text = string.IsNullOrWhiteSpace(sParentCatalogPath) == false ? sParentCatalogPath.Replace("\\", " > ") : " "; |
|
sCurrentShowCatalogPath = tbCatalog.Text; |
|
RefreshBrowserLocalDataGrid(sParentCatalogPath); |
|
SetParentCatalogPath(sParentCatalogPath); |
|
} |
|
|
|
lbInfoTemp.Content = tbCatalog.Text; |
|
lbInfoTemp.ToolTip = lbInfoTemp.Content; |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("返回父级目录时失败,异常原因: " + ex + " ; "); |
|
return; |
|
} |
|
} |
|
|
|
private void TbCatalog_KeyDown(object sender, KeyEventArgs e) |
|
{ |
|
string stbCatalogText = ""; |
|
try |
|
{ |
|
if (e.Key == Key.Enter) |
|
{ |
|
stbCatalogText = tbCatalog.Text; |
|
|
|
if (string.IsNullOrWhiteSpace(stbCatalogText) == true) |
|
{ |
|
MessageBox.Show("跳转的目录地址不能为空。"); |
|
if (IsRootCatalog == true) |
|
{ |
|
btnBack.IsEnabled = false; |
|
btnBack.ToolTip = "无上一级目录";//返回至上一级 |
|
tbCatalog.Text = sRootCatalogDescription; |
|
if (string.IsNullOrWhiteSpace(tbCatalog.Text) == false) |
|
{ |
|
tbCatalog.SelectionStart = tbCatalog.Text.Length; |
|
} |
|
} |
|
else |
|
{ |
|
btnBack.IsEnabled = true; |
|
btnBack.ToolTip = "返回至上一级";//无上一级目录 |
|
if (string.IsNullOrWhiteSpace(sCurrentShowCatalogPath) == true) |
|
{ |
|
tbCatalog.Text = sRootCatalogDescription; |
|
if (string.IsNullOrWhiteSpace(tbCatalog.Text) == false) |
|
{ |
|
tbCatalog.SelectionStart = tbCatalog.Text.Length; |
|
} |
|
} |
|
else |
|
{ |
|
tbCatalog.Text = sCurrentShowCatalogPath; |
|
} |
|
|
|
if (string.IsNullOrWhiteSpace(tbCatalog.Text) == false) |
|
{ |
|
tbCatalog.SelectionStart = tbCatalog.Text.Length; |
|
} |
|
} |
|
} |
|
else |
|
{ |
|
if (stbCatalogText == sRootCatalogDescription) |
|
{ |
|
ToRefreshGridData(); |
|
return; |
|
} |
|
else |
|
{ |
|
string stbCatalogTextTemp = DealWithCatalogCharInfo(stbCatalogText); |
|
stbCatalogText = string.IsNullOrWhiteSpace(stbCatalogTextTemp) == false ? stbCatalogTextTemp.Replace(">", "\\") : " "; |
|
if (string.IsNullOrWhiteSpace(stbCatalogText) == true) |
|
{ |
|
return; |
|
} |
|
if (Directory.Exists(stbCatalogText) == true) |
|
{ |
|
RefreshBrowserLocalDataGrid(stbCatalogText); |
|
SetParentCatalogPath(stbCatalogText); |
|
tbCatalog.Text = stbCatalogTextTemp; |
|
if (string.IsNullOrWhiteSpace(tbCatalog.Text) == false) |
|
{ |
|
tbCatalog.SelectionStart = tbCatalog.Text.Length; |
|
} |
|
} |
|
else |
|
{ |
|
MessageBox.Show("输入的目录地址无效,跳转失败。"); |
|
tbCatalog.Text = ExtendMethd.JudgeIsCouldConversionStringOrHasValue(lbInfoTemp.Content) == true ? lbInfoTemp.Content.ToString() : ""; |
|
if (string.IsNullOrWhiteSpace(tbCatalog.Text) == false) |
|
{ |
|
tbCatalog.SelectionStart = tbCatalog.Text.Length; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("输入目录获取内容期间失败,异常原因: " + ex + " ; "); |
|
} |
|
finally |
|
{ |
|
if (string.IsNullOrWhiteSpace(stbCatalogText) == false) |
|
{ |
|
stbCatalogText = ""; |
|
} |
|
} |
|
} |
|
|
|
private string DealWithCatalogCharInfo(string sCatalogInfo) |
|
{ |
|
string sTempInfo = ""; |
|
string[] aArrayTemp = null; |
|
try |
|
{ |
|
if (string.IsNullOrWhiteSpace(sCatalogInfo) == true) |
|
{ |
|
return ""; |
|
} |
|
else |
|
{ |
|
aArrayTemp = sCatalogInfo.Split('>'); |
|
if (aArrayTemp == null || aArrayTemp.Count() <= 0) |
|
{ |
|
return sCatalogInfo; |
|
} |
|
else |
|
{ |
|
for (int i = 0; i < aArrayTemp.Count(); i++) |
|
{ |
|
if (ExtendMethd.JudgeIsCouldConversionStringOrHasValue(aArrayTemp[i]) == false) |
|
{ |
|
continue; |
|
} |
|
else |
|
{ |
|
sTempInfo += aArrayTemp[i].ToString().TrimStart().TrimEnd() + ">"; |
|
} |
|
} |
|
|
|
if (string.IsNullOrWhiteSpace(sTempInfo) == true) |
|
{ |
|
return ""; |
|
} |
|
else |
|
{ |
|
sTempInfo = sTempInfo.TrimStart('>').TrimEnd('>'); |
|
//LogAPI.Debug("转化后地址: " + sTempInfo + " ; "); |
|
return sTempInfo; |
|
} |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("处理输入的目录地址信息时失败,异常原因:" + ex + " ; "); |
|
return ""; |
|
} |
|
finally |
|
{ |
|
if (aArrayTemp != null && aArrayTemp.Count() <= 0) |
|
{ |
|
aArrayTemp = null; |
|
} |
|
if (string.IsNullOrWhiteSpace(sTempInfo) == false) |
|
{ |
|
sTempInfo = ""; |
|
} |
|
} |
|
} |
|
|
|
private void TbCatalog_MouseMove(object sender, MouseEventArgs e) |
|
{ |
|
try |
|
{ |
|
var bc = new BrushConverter(); |
|
tbCatalog.Background = (Brush)bc.ConvertFrom("#CFCFCF"); |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("鼠标移动时给 TextBox 赋值颜色失败,异常原因: " + ex + " ; "); |
|
return; |
|
} |
|
} |
|
|
|
private void TbCatalog_MouseLeave(object sender, MouseEventArgs e) |
|
{ |
|
try |
|
{ |
|
var bc = new BrushConverter(); |
|
tbCatalog.Background = (Brush)bc.ConvertFrom("#F2F2F2"); |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("鼠标离开时给 TextBox 赋值颜色失败,异常原因: " + ex + " ; "); |
|
return; |
|
} |
|
} |
|
|
|
} |
|
|
|
}
|
|
|