using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ComponentFactory.Krypton.Docking;
using ComponentFactory.Krypton.Navigator;
using ComponentFactory.Krypton.Toolkit;
using ComponentFactory.Krypton.Workspace;
using System.Runtime.InteropServices;
using UCDraw.UC;
using System.IO;
using UCDraw;
using GeoSigma.UCDraw;
using UCDraw.Editor;
//using SymbolLibManager;
namespace LibTest
{
public partial class FormMain : Form
{
int nViewCount = 0;
MainView viewerCur;
public FormMain()
{
InitializeComponent();
//this.WindowState = FormWindowState.Maximized;
}
private void Form1_Load(object sender, EventArgs e)
{
//KryptonDockingWorkspace ws = dockingManager.ManageWorkspace(dockableWorkspace);
//dockingManager.ManageControl(kryptonPanel1, ws);
//dockingManager.ManageFloating(this);
//OpenFile("c:\\temp\\钻探目标分布图.dfd");
//OpenFile("c:\\temp\\某地区射层层深度构造图.dfd");
}
private KryptonPage CreateNewPage(MainView viewer, string pageText)
{
FileInfo fi = new FileInfo(pageText);
//KryptonWorkspaceCell cell = dockableWorkspace.ActiveCell;
//if (cell==null)
//{
// cell=new KryptonWorkspaceCell();
// dockableWorkspace.Root.Children.Add(cell);
// cell.SelectedPageChanged+=Cell_SelectedPageChanged;
//}
//cell.CloseAction += OnClsoeAction;
KryptonPage pageView = new KryptonPage();
//pageView.StateSelected.Tab.Back.Color1 = System.Drawing.SystemColors.GradientActiveCaption;
//pageView.StateSelected.Tab.Back.Color2 = System.Drawing.SystemColors.GradientInactiveCaption;
//pageView.Text=fi.Name;
//pageView.TextTitle=pageView.Text;
//pageView.TextDescription=pageView.Text;
//pageView.ToolTipStyle= LabelStyle.ToolTip;
//pageView.ToolTipTitle=fi.FullName;
//pageView.UniqueName=viewer.ID+"";
//// Create a close button for the page
//ButtonSpecAny bsa = new ButtonSpecAny();
//bsa.Tag=pageView;
//bsa.Type=PaletteButtonSpecStyle.Close;
//bsa.Click+=new EventHandler(OnClosePage);
//pageView.ButtonSpecs.Add(bsa);
//// Add the control for display inside the page
//viewer.Dock=DockStyle.Fill;
//pageView.Controls.Add(viewer);
////viewers.Add(viewerCur);
//viewerCur=viewer;
////// Add docking pages
////cell.Pages.Add(pageView);
////cell.SelectedPage=pageView;
//viewerCur.MouseMoveXYEvent += ShowMouseXY;
return pageView;
}
private void OnClosePage(object sender, EventArgs e)
{
// Find the page this button is contained within
ButtonSpecAny bsa = (ButtonSpecAny)sender;
//KryptonPage page = (KryptonPage)bsa.Tag;
// Close the page
ClosePage((KryptonPage)bsa.Tag);
}
///
/// 关闭页面
///
/// 要闭关的页面
/// true-取消闭关 false--关闭
//ToFix:这个规定返回值是否不合理
private bool ClosePage(KryptonPage page)
{
// We must have a page to actually close
if (page!=null)
{
//
bool bModified = false;
if (viewerCur !=null && viewerCur.IsDocumentModified())
{
bModified = true;
}
//
// If the page is dirty then we need to ask if it should be saved
if (page.Text.EndsWith("*") || bModified)
{
switch (MessageBox.Show("是否将修改保存到'"+page.Text.TrimEnd('*')+"' ?",
"关闭文档", MessageBoxButtons.YesNoCancel))
{
case DialogResult.Cancel:
// Returning true indicates the operation was cancelled
return true;
case DialogResult.Yes:
btnSaveFile_Click(null, null);
break;
case DialogResult.No:
break;
}
}
// Remove the page from the containing cell
//KryptonWorkspaceCell cell = dockableWorkspace.CellForPage(page);
//cell.Pages.Remove(page);
//page.Dispose();
}
return false;
}
private void SetDirtyFlag(bool isDirty)
{
//KryptonPage pageView = dockableWorkspace.ActivePage;
//if (pageView==null) return;
//SetDirtyFlag(pageView, isDirty);
}
private void SetDirtyFlag(KryptonPage pageView, bool isDirty)
{
if (!isDirty)
{
pageView.Text=pageView.Text.TrimEnd('*');
pageView.TextTitle=pageView.TextTitle.TrimEnd('*');
pageView.TextDescription=pageView.TextDescription.TrimEnd('*');
}
else
{
pageView.Text=pageView.Text.TrimEnd('*')+"*";
pageView.TextTitle=pageView.TextTitle.TrimEnd('*')+"*";
pageView.TextDescription=pageView.TextDescription.TrimEnd('*')+"*";
}
}
private void SetTitle(string fullFileName)
{
//KryptonPage pageView = dockableWorkspace.ActivePage;
//if (pageView==null) return;
//FileInfo fi = new FileInfo(fullFileName);
//pageView.Text=fi.Name;
//pageView.TextTitle=pageView.Text;
//pageView.TextDescription=pageView.Text;
//pageView.ToolTipStyle=LabelStyle.ToolTip;
//pageView.ToolTipTitle=fi.FullName;
}
///
/// 新建图形
///
///
///
private void btnNewFile_Click(object sender, EventArgs e)
{
NewFile();
}
private void NewFile()
{
//MainView viewer = new MainView();
//if (viewer.NewFile() == false)
//{
// return;
//}
//string strPageText = "图形 " + (++nViewCount);
//KryptonPage pageView = CreateNewPage(viewer, strPageText);
//SetDirtyFlag(pageView, true);
//viewer.LoadLayerTree();
}
private void btnOpenFile_Click(object sender, EventArgs e)
{
string[] fileNames = DocHelper.SelectMutiFiles();
foreach (var item in fileNames)
{
if (string.IsNullOrEmpty(item))
{
OpenFile(item);
}
}
}
private void OpenFile(string fileName)
{
//MainView viewer = new MainView();
//if (viewer.OpenFile(fileName)==false)
//{
// return;
//}
////string strPageText = "图形 "+(nViewCount+1);
//CreateNewPage(viewer, fileName);
//viewer.DrawerGotFocus+=Viewer_DrawerGotFocus;
}
///
/// 文件保存
///
///
///
private void btnSaveFile_Click(object sender, EventArgs e)
{
SaveFile();
}
private void SaveFile()
{
if (viewerCur == null) return;
if (viewerCur.SaveFile())
{
SetTitle(viewerCur.FileFullName);
//SetDirtyFlag(false);
//UpdateApplicationTitle();
}
}
private void btnSaveAs_Click(object sender, EventArgs e)
{
if (viewerCur==null) return;
if (viewerCur.SaveAs())
{
SetTitle(viewerCur.FileFullName);
//SetDirtyFlag(false);
}
}
private void Viewer_DrawerGotFocus(object sender, EventArgs e)
{
//MessageBox.Show(sender.ToString());
}
private void Cell_SelectedPageChanged(object sender, EventArgs e)
{
//修复Bug:当新建/打开一个文档后 viewerCur未能指向新的MainView
//出错原因:dockableWorkspace.ActivePage获得的是未新建/打开文档前的当前文档
KryptonWorkspaceCell cell = sender as KryptonWorkspaceCell;
if (cell == null)
{
return;
}
KryptonPage pageView = cell.SelectedPage;
if (pageView==null) return;
if(pageView.Controls.Count>0)
viewerCur = pageView.Controls[0] as MainView;
//KryptonPage pageView = dockableWorkspace.ActivePage;
//if (pageView==null) return;
//if(pageView.Controls.Count>0)
// viewerCur = pageView.Controls[0] as MainView;
}
/*从最右侧点击X 来关闭一个页面 会调这个函数三次 我难以解决此问题 暂时屏蔽掉
//响应最右侧的关闭按钮触发的关闭事件
private void OnClsoeAction(object sender, CloseActionEventArgs e)
{
KryptonPage page = dockableWorkspace.ActivePage;
MainView viewer = null;
if (page.Controls.Count > 0)
viewer = page.Controls[0] as MainView;
if (viewer == null)
{
return;
}
bool bModified = false;
if (viewer.IsDocumentModified())
{
bModified = true;
}
if (bModified == false)
return;
DialogResult result = MessageBox.Show("是否将修改保存到'" + page.Text.TrimEnd('*') + "' ?", "关闭文档",
MessageBoxButtons.YesNoCancel);
if (result == DialogResult.OK)
{
btnSaveFile_Click(null, null);
}
else if (result == DialogResult.Cancel)
{
e.Action = CloseButtonAction.None;
}
}
*/
private void layerTree_Click(object sender, EventArgs e)
{
viewerCur.LayerVisible=!viewerCur.LayerVisible;
}
private void btnPropertyShow_Click(object sender, EventArgs e)
{
viewerCur.PropertyVisible=!viewerCur.PropertyVisible;
}
private void tsbToolElement_Click(object sender, EventArgs e)
{
viewerCur.ToolElementVisible=!viewerCur.ToolElementVisible;
}
private void tsbPrint_Click(object sender, EventArgs e)
{
viewerCur.PrintDraw();
}
private enum KeyModifiers
{
None = 0,
Alt = 1,
Control = 2,
Shift = 4,
Windows = 8
}
//id hot key identifier
[DllImport("user32.dll", SetLastError = true)]
private static extern bool RegisterHotKey(IntPtr hWnd, int id, KeyModifiers fsModifiers, Keys vk);
[DllImport("user32.dll", SetLastError = true)]
private static extern bool UnregisterHotKey(IntPtr hWnd, int id);
private void RegisterHotKeys()
{
RegisterHotKey(Handle, 1001, KeyModifiers.Control, Keys.O);
RegisterHotKey(Handle, 1002, KeyModifiers.Control, Keys.S);
RegisterHotKey(Handle, 1003, KeyModifiers.Control, Keys.N);
RegisterHotKey(Handle, 1004, KeyModifiers.None, Keys.Escape);
}
private void UnRegisterHotKeys()
{
UnregisterHotKey(Handle, 1001);
UnregisterHotKey(Handle, 1002);
UnregisterHotKey(Handle, 1003);
UnregisterHotKey(Handle, 1004);
}
//private void processHotKey(int hotKeyId)
//{
// if (hotKeyId == 1001)
// {
// //OpenFile();
// }
// else if(hotKeyId == 1002)
// {
// SaveFile();
// }
// else if(hotKeyId == 1003)
// {
// NewFile();
// }
// else if (hotKeyId == 1004)
// {
// ProcessEscape();
// }
//}
//protected override void WndProc(ref Message m)//监视Windows消息
//{
// const int WM_HOTKEY = 0x0312; //热键消息
// if (m.Msg == WM_HOTKEY)
// {
// processHotKey(m.WParam.ToInt32());
// }
// base.WndProc(ref m);
//}
//private void FormMain_Activated(object sender, EventArgs e)
//{
// RegisterHotKeys();
//}
//private void FormMain_Deactivate(object sender, EventArgs e)
//{
// UnRegisterHotKeys();
//}
//private void ProcessEscape()
//{
// if (viewerCur == null)
// return;
// viewerCur.Escape();
//}
private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
{
//KryptonWorkspaceCell cell = dockableWorkspace.ActiveCell;
//if (cell == null)
//{
// return;
//}
//KryptonPage[] pageArray = cell.Pages.ToArray();
//foreach (KryptonPage page in pageArray)
//{
// if (page.Controls.Count == 0) //应该不可能出现的情况
// break; //TODO:log
// if (ClosePage(page) == true)
// {
// e.Cancel = true;
// break;
// }
//} //end foreach
} //end FormMain_FormClosing
public void ShowMouseXY(string mouseXY)
{
tsslStatusInfo.Text = mouseXY;
}
private void btnSymbolManage_Click(object sender, EventArgs e)
{
//var markEdit = new frmMarkEditor();
//markEdit.Show();
}
}
}