htmlviewcontent.cs

来自「全功能c#编译器」· CS 代码 · 共 419 行 · 第 1/2 页

CS
419
字号
// <file>
//     <copyright see="prj:///doc/copyright.txt"/>
//     <license see="prj:///doc/license.txt"/>
//     <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
//     <version value="$version"/>
// </file>

using System;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
using System.Collections;
using System.Drawing;
using System.Drawing.Text;
using System.Drawing.Design;
using System.Reflection;
using System.Windows.Forms;
using System.Drawing.Printing;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Xml;

using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Internal.Project;
using ICSharpCode.SharpDevelop.Internal.Undo;
using ICSharpCode.SharpDevelop.Gui.Components;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;

using ICSharpCode.Core.Properties;
using ICSharpCode.Core.AddIns;
using ICSharpCode.Core.Services;
using ICSharpCode.SharpDevelop.Services;
using SharpDevelop.Internal.Parser;
using ICSharpCode.Core.AddIns.Codons;
using ICSharpCode.TextEditor;
using ICSharpCode.TextEditor.Document;

using System.CodeDom;
using System.CodeDom.Compiler;

using Microsoft.CSharp;
using Microsoft.VisualBasic;
using onlyconnect;

using Reflector.UserInterface;

namespace HtmlBackendBinding
{
	public class HtmlViewContent : AbstractViewContent, ITextAreaControlProvider, IEditable
	{
		TabControl   tabControl;
		IViewContent htmlTextEditor;
		AxSideTab    tab = null;
		
//		CommandBar    menuToolBar = null;
		
		onlyconnect.HtmlEditor htmlEditor;
		
		// toolbar elements
//		ComboBox fontComboBox = new TextComboBox(true);
		
		
		public TextAreaControl TextAreaControl {
			get {
				return (TextAreaControl)htmlTextEditor.Control;
			}
		}
		
		public IClipboardHandler ClipboardHandler {
			get {
				if (tabControl.SelectedTab.Controls[0] is IEditable) {
					return ((IEditable)tabControl.SelectedTab.Controls[0]).ClipboardHandler;
				}
				return new HtmlEditorClipboardHandler(htmlEditor);
			}
		}
		
		public string Text {
			get {
				return ((IEditable)htmlTextEditor).Text;
			}
			set {
				((IEditable)htmlTextEditor).Text = value;
			}
		}
		
		public override string ContentName {
			get {
				return htmlTextEditor.ContentName;
			}
			set {
				htmlTextEditor.ContentName = value;
			}
		}
			
		public override string UntitledName {
			get {
				return htmlTextEditor.UntitledName;
			}
			set {
				htmlTextEditor.UntitledName = value;
			}
		}
		
		public override Control Control {
			get {
				return tabControl;
			}
		}
		
		// AbstractViewContent members
		public override IWorkbenchWindow WorkbenchWindow {
			set {
				base.WorkbenchWindow = value;
				WorkbenchWindow.WindowSelected   += new EventHandler(SelectMe);
				WorkbenchWindow.WindowDeselected += new EventHandler(DeSelectMe);
			}
		}
		
		public HtmlViewContent(string fileName)
		{
			TextEditorDisplayBinding tdb = new TextEditorDisplayBinding();
			htmlTextEditor               = tdb.CreateContentForFile(fileName);
			InitializeComponent();
			ContentName = fileName;
		}
		
		public HtmlViewContent(string languageName, string content)
		{
			TextEditorDisplayBinding tdb = new TextEditorDisplayBinding();
			htmlTextEditor               = tdb.CreateContentForLanguage(languageName, content);
			InitializeComponent();
			htmlEditor.HtmlEvent += new HtmlEventHandler(ClickMe);
		}
		
		
		
		void ClickMe(object sender, HtmlEventArgs e)
		{
			string type = e.Event.type;
			
			switch (type) {
				case "click":
					if (SharpDevelopSideBar.SideBar.ActiveTab.ChoosedItem.Tag is Element) {
						Element elem = (Element)SharpDevelopSideBar.SideBar.ActiveTab.ChoosedItem.Tag;
						elem.HtmlElement = htmlEditor.Document.createElement(elem.TagName);
						
						string html = htmlEditor.Document.body.innerHTML + elem.ToString();
						
						htmlEditor.Document.body.innerHTML = html;
//						
//						mshtml.IHTMLDOMNode body = (mshtml.IHTMLDOMNode);
//						body.appendChild((mshtml.IHTMLDOMNode)elem.HtmlElement);
//						Console.WriteLine("done");
						
						tab.ChoosedItem = tab.Items[0];
						SharpDevelopSideBar.SideBar.Refresh();
					}
					break;
			}
		}
		
		public void Undo()
		{
			this.htmlEditor.Document.execCommand("Undo", false, null);
		}
		
		public void Redo()
		{
			this.htmlEditor.Document.execCommand("Redo", false, null);
		}
		
		void SelectMe(object sender, EventArgs e)
		{
			if (!SharpDevelopSideBar.SideBar.Tabs.Contains(tab)) {
				SharpDevelopSideBar.SideBar.Tabs.Add(tab);
			}
			SharpDevelopSideBar.SideBar.ActiveTab = tab;
		}
		
		void DeSelectMe(object sender, EventArgs e)
		{
			SharpDevelopSideBar.SideBar.Tabs.Remove(tab);
		}
		
		void InitializeComponent()
		{
			tabControl = new TabControl();
			tabControl.SelectedIndexChanged += new EventHandler(TabIndexChanged);
			tabControl.Alignment = TabAlignment.Bottom;
			
			IconService iconService = (IconService)ServiceManager.Services.GetService(typeof(IconService));
			tabControl.ImageList = new ImageList();
			tabControl.ImageList.Images.Add(iconService.GetBitmap("XmlFileIcon"));
			tabControl.ImageList.Images.Add(iconService.GetBitmap("Icons.16x16.DesignPanel"));
			
			
			TabPage sourcePage = new TabPage("Source");
			sourcePage.ImageIndex = 0;
			htmlTextEditor.Control.Dock = DockStyle.Fill;
			htmlTextEditor.DirtyChanged += new EventHandler(TextAreaIsDirty);
			sourcePage.Controls.Add(htmlTextEditor.Control);
			tabControl.TabPages.Add(sourcePage);
			
			TabPage designerPage = new TabPage("Design");
			designerPage.ImageIndex = 1;
			htmlEditor = new onlyconnect.HtmlEditor();
			htmlEditor.IsDesignMode = true;
			htmlEditor.Dock = DockStyle.Fill;
			htmlEditor.TabIndex = 7;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?