📄 texteditordisplaybinding.cs
字号:
IsDirty = true;
}
public override void RedrawContent()
{
textAreaControl.OptionsChanged();
textAreaControl.Refresh();
}
public override void Dispose()
{
if (this.IsUntitled) {
ParserService.ClearParseInformation(this.UntitledName);
}
if (WorkbenchSingleton.MainForm != null) {
WorkbenchSingleton.MainForm.Activated -= new EventHandler(GotFocusEvent);
}
if (this.watcher != null) {
this.watcher.Dispose();
this.watcher = null;
}
textAreaControl.Dispose();
base.Dispose();
}
public override bool IsReadOnly {
get {
return textAreaControl.IsReadOnly;
}
}
public override void Save(string fileName)
{
OnSaving(EventArgs.Empty);
// KSL, Start new line
if (watcher != null) {
this.watcher.EnableRaisingEvents = false;
}
// KSL End
if (!textAreaControl.CanSaveWithCurrentEncoding()) {
if (MessageService.AskQuestion("The file cannot be saved with the current encoding " +
textAreaControl.Encoding.EncodingName + " without losing data." +
"\nDo you want to save it using UTF-8 instead?")) {
textAreaControl.Encoding = System.Text.Encoding.UTF8;
}
}
textAreaControl.SaveFile(fileName);
if (fileName != this.FileName) {
ParserService.ClearParseInformation(this.FileName ?? this.UntitledName);
FileName = fileName;
ParserService.ParseViewContent(this);
}
TitleName = Path.GetFileName(fileName);
IsDirty = false;
SetWatcher();
OnSaved(new SaveEventArgs(true));
}
public override void Load(string fileName)
{
textAreaControl.IsReadOnly = (File.GetAttributes(fileName) & FileAttributes.ReadOnly) == FileAttributes.ReadOnly;
bool autodetectEncoding = true;
textAreaControl.LoadFile(fileName, true, autodetectEncoding);
FileName = fileName;
TitleName = Path.GetFileName(fileName);
IsDirty = false;
SetWatcher();
foreach (Bookmarks.SDBookmark mark in Bookmarks.BookmarkManager.GetBookmarks(fileName)) {
mark.Document = textAreaControl.Document;
textAreaControl.Document.BookmarkManager.Marks.Add(mark);
}
}
public Properties CreateMemento()
{
Properties properties = new Properties();
properties.Set("CaretOffset", textAreaControl.ActiveTextAreaControl.Caret.Offset);
properties.Set("VisibleLine", textAreaControl.ActiveTextAreaControl.TextArea.TextView.FirstVisibleLine);
properties.Set("HighlightingLanguage", textAreaControl.Document.HighlightingStrategy.Name);
properties.Set("Foldings", textAreaControl.Document.FoldingManager.SerializeToString());
return properties;
}
public void SetMemento(Properties memento)
{
Properties properties = (Properties)memento;
textAreaControl.ActiveTextAreaControl.Caret.Position = textAreaControl.Document.OffsetToPosition(Math.Min(textAreaControl.Document.TextLength, Math.Max(0, properties.Get("CaretOffset", textAreaControl.ActiveTextAreaControl.Caret.Offset))));
// textAreaControl.SetDesiredColumn();
if (textAreaControl.Document.HighlightingStrategy.Name != properties.Get("HighlightingLanguage", textAreaControl.Document.HighlightingStrategy.Name)) {
IHighlightingStrategy highlightingStrategy = HighlightingStrategyFactory.CreateHighlightingStrategy(properties.Get("HighlightingLanguage", textAreaControl.Document.HighlightingStrategy.Name));
if (highlightingStrategy != null) {
textAreaControl.Document.HighlightingStrategy = highlightingStrategy;
}
}
textAreaControl.ActiveTextAreaControl.TextArea.TextView.FirstVisibleLine = properties.Get("VisibleLine", 0);
textAreaControl.Document.FoldingManager.DeserializeFromString(properties.Get("Foldings", ""));
// // insane check for cursor position, may be required for document reload.
// int lineNr = textAreaControl.Document.GetLineNumberForOffset(textAreaControl.Document.Caret.Offset);
// LineSegment lineSegment = textAreaControl.Document.GetLineSegment(lineNr);
// textAreaControl.Document.Caret.Offset = Math.Min(lineSegment.Offset + lineSegment.Length, textAreaControl.Document.Caret.Offset);
//
// textAreaControl.OptionsChanged();
// textAreaControl.Refresh();
}
void CaretUpdate(object sender, EventArgs e)
{
CaretChanged(null, null);
CaretModeChanged(null, null);
}
void CaretChanged(object sender, EventArgs e)
{
Point pos = textAreaControl.Document.OffsetToPosition(textAreaControl.ActiveTextAreaControl.Caret.Offset);
LineSegment line = textAreaControl.Document.GetLineSegment(pos.Y);
StatusBarService.SetCaretPosition(pos.X + 1, pos.Y + 1, textAreaControl.ActiveTextAreaControl.Caret.Offset - line.Offset + 1);
}
void CaretModeChanged(object sender, EventArgs e)
{
StatusBarService.SetInsertMode(textAreaControl.ActiveTextAreaControl.Caret.CaretMode == CaretMode.InsertMode);
}
public override string FileName {
set {
if (Path.GetExtension(FileName) != Path.GetExtension(value)) {
if (textAreaControl.Document.HighlightingStrategy != null) {
textAreaControl.Document.HighlightingStrategy = HighlightingStrategyFactory.CreateHighlightingStrategyForFile(value);
textAreaControl.Refresh();
}
}
base.FileName = value;
base.TitleName = Path.GetFileName(value);
}
}
public void JumpTo(int line, int column)
{
textAreaControl.ActiveTextAreaControl.JumpTo(line, column);
}
public void ForceFoldingUpdate()
{
if (textAreaControl.TextEditorProperties.EnableFolding) {
string fileName = textAreaControl.FileName;
ParseInformation parseInfo = ParserService.GetParseInformation(fileName);
if (parseInfo == null) {
parseInfo = ParserService.ParseFile(fileName,
textAreaControl.Document.TextContent, false, false);
}
textAreaControl.Document.FoldingManager.UpdateFoldings(fileName, parseInfo);
UpdateClassMemberBookmarks(parseInfo);
}
}
public void ParseInformationUpdated(ParseInformation parseInfo)
{
if (textAreaControl.TextEditorProperties.EnableFolding) {
WorkbenchSingleton.SafeThreadAsyncCall(this, "ParseInformationUpdatedInvoked", parseInfo);
}
}
void ParseInformationUpdatedInvoked(ParseInformation parseInfo)
{
try {
textAreaControl.Document.FoldingManager.UpdateFoldings(TitleName, parseInfo);
UpdateClassMemberBookmarks(parseInfo);
textAreaControl.ActiveTextAreaControl.TextArea.Refresh(textAreaControl.ActiveTextAreaControl.TextArea.FoldMargin);
textAreaControl.ActiveTextAreaControl.TextArea.Refresh(textAreaControl.ActiveTextAreaControl.TextArea.IconBarMargin);
} catch (Exception ex) {
MessageService.ShowError(ex);
}
}
void UpdateClassMemberBookmarks(ParseInformation parseInfo)
{
BookmarkManager bm = textAreaControl.Document.BookmarkManager;
bm.RemoveMarks(new Predicate<Bookmark>(IsClassMemberBookmark));
if (parseInfo == null) return;
foreach (IClass c in parseInfo.MostRecentCompilationUnit.Classes) {
AddClassMemberBookmarks(bm, c);
}
}
void AddClassMemberBookmarks(BookmarkManager bm, IClass c)
{
if (c.IsSynthetic) return;
if (!c.Region.IsEmpty) {
bm.AddMark(new Bookmarks.ClassBookmark(textAreaControl.Document, c));
}
foreach (IClass innerClass in c.InnerClasses) {
AddClassMemberBookmarks(bm, innerClass);
}
foreach (IMethod m in c.Methods) {
if (m.Region.IsEmpty || m.IsSynthetic) continue;
bm.AddMark(new Bookmarks.MethodBookmark(textAreaControl.Document, m));
}
foreach (IProperty m in c.Properties) {
if (m.Region.IsEmpty || m.IsSynthetic) continue;
bm.AddMark(new Bookmarks.PropertyBookmark(textAreaControl.Document, m));
}
foreach (IField f in c.Fields) {
if (f.Region.IsEmpty || f.IsSynthetic) continue;
bm.AddMark(new Bookmarks.FieldBookmark(textAreaControl.Document, f));
}
foreach (IEvent e in c.Events) {
if (e.Region.IsEmpty || e.IsSynthetic) continue;
bm.AddMark(new Bookmarks.EventBookmark(textAreaControl.Document, e));
}
}
bool IsClassMemberBookmark(Bookmark b)
{
return b is Bookmarks.ClassMemberBookmark || b is Bookmarks.ClassBookmark;
}
#region ICSharpCode.SharpDevelop.Gui.IClipboardHandler interface implementation
public bool EnableCut {
get {
return textAreaControl.ActiveTextAreaControl.TextArea.ClipboardHandler.EnableCut;
}
}
public bool EnableCopy {
get {
return textAreaControl.ActiveTextAreaControl.TextArea.ClipboardHandler.EnableCopy;
}
}
public bool EnablePaste {
get {
return textAreaControl.ActiveTextAreaControl.TextArea.ClipboardHandler.EnablePaste;
}
}
public bool EnableDelete {
get {
return textAreaControl.ActiveTextAreaControl.TextArea.ClipboardHandler.EnableDelete;
}
}
public bool EnableSelectAll {
get {
return textAreaControl.ActiveTextAreaControl.TextArea.ClipboardHandler.EnableSelectAll;
}
}
public void SelectAll()
{
textAreaControl.ActiveTextAreaControl.TextArea.ClipboardHandler.SelectAll(null, null);
}
public void Delete()
{
textAreaControl.ActiveTextAreaControl.TextArea.ClipboardHandler.Delete(null, null);
}
public void Paste()
{
textAreaControl.ActiveTextAreaControl.TextArea.ClipboardHandler.Paste(null, null);
}
public void Copy()
{
textAreaControl.ActiveTextAreaControl.TextArea.ClipboardHandler.Copy(null, null);
}
public void Cut()
{
textAreaControl.ActiveTextAreaControl.TextArea.ClipboardHandler.Cut(null, null);
}
#endregion
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -