public override void ParseXml(XmlElement aNode) { base.ParseXml(aNode); FEditProtect = aNode.GetAttribute("editprotect") == "1"; FOutOfRang = aNode.GetAttribute("outofrang") == "1"; FCopyProtect = aNode.GetAttribute("copyprotect") == "1"; FAllocValue = aNode.GetAttribute("allocvalue") == "1"; if (aNode.HasAttribute("deleteallow")) { FDeleteAllow = aNode.GetAttribute("deleteallow") == "1"; } else { FDeleteAllow = true; } byte vByte = 0; bool vHasValue = byte.TryParse(aNode.GetAttribute("styleex"), out vByte); FStyleEx = (StyleExtra)vByte; string vProp = HC.View.HC.GetXmlRN(aNode.Attributes["property"].Value); DeProp.SetPropertyString(vProp, FPropertys); }
public override void LoadFromStream(Stream aStream, HCStyle aStyle, ushort aFileVersion) { base.LoadFromStream(aStream, aStyle, aFileVersion); byte vByte = (byte)aStream.ReadByte(); FEditProtect = HC.View.HC.IsOdd(vByte >> 7); FOutOfRang = HC.View.HC.IsOdd(vByte >> 6); FCopyProtect = HC.View.HC.IsOdd(vByte >> 5); FAllocValue = HC.View.HC.IsOdd(vByte >> 4); if (aFileVersion > 34) { FDeleteAllow = HC.View.HC.IsOdd(vByte >> 3); } else { FDeleteAllow = true; } vByte = (byte)aStream.ReadByte(); FStyleEx = (StyleExtra)vByte; string vS = ""; HC.View.HC.HCLoadTextFromStream(aStream, ref vS, aFileVersion); DeProp.SetPropertyString(vS, FPropertys); }
public override void Assign(HCCustomItem source) { base.Assign(source); FStyleEx = (source as DeItem).StyleEx; string vS = DeProp.GetPropertyString((source as DeItem).Propertys); DeProp.SetPropertyString(vS, FPropertys); }
public override void Assign(HCCustomItem source) { base.Assign(source); FStyleEx = (source as DeItem).StyleEx; FEditProtect = (source as DeItem).EditProtect; FDeleteAllow = (source as DeItem).DeleteAllow; FCopyProtect = (source as DeItem).CopyProtect; FAllocValue = (source as DeItem).AllocValue; FOutOfRang = (source as DeItem).OutOfRang; string vS = DeProp.GetPropertyString((source as DeItem).Propertys); DeProp.SetPropertyString(vS, FPropertys); }
public override void LoadFromStream(Stream aStream, HCStyle aStyle, ushort aFileVersion) { base.LoadFromStream(aStream, aStyle, aFileVersion); byte vByte = (byte)aStream.ReadByte(); FEditProtect = (vByte >> 7) == 1; vByte = (byte)aStream.ReadByte(); FStyleEx = (StyleExtra)vByte; string vS = ""; HC.View.HC.HCLoadTextFromStream(aStream, ref vS, aFileVersion); DeProp.SetPropertyString(vS, FPropertys); }
/// <summary> 按键按下 </summary> /// <param name="e">按键信息</param> protected override void OnKeyDown(KeyEventArgs e) { if (FTrace) { if (HC.View.HC.IsKeyDownEdit(e.KeyValue)) { string vText = ""; string vCurTrace = ""; int vStyleNo = HCStyle.Null; int vParaNo = HCStyle.Null; StyleExtra vCurStyleEx = StyleExtra.cseNone; HCRichData vData = this.ActiveSectionTopLevelData() as HCRichData; if (vData.SelectExists()) { this.DisSelect(); return; } if (vData.SelectInfo.StartItemNo < 0) { return; } if (vData.Items[vData.SelectInfo.StartItemNo].StyleNo < HCStyle.Null) { base.OnKeyDown(e); return; } // 取光标处的文本 if (e.KeyCode == Keys.Back) // 回删 { if ((vData.SelectInfo.StartItemNo == 0) && (vData.SelectInfo.StartItemOffset == 0)) // 第一个最前面则不处理 { return; } else // 不是第一个最前面 if (vData.SelectInfo.StartItemOffset == 0) // 最前面,移动到前一个最后面处理 { if (vData.Items[vData.SelectInfo.StartItemNo].Text != "") // 当前行不是空行 { vData.SelectInfo.StartItemNo = vData.SelectInfo.StartItemNo - 1; vData.SelectInfo.StartItemOffset = vData.Items[vData.SelectInfo.StartItemNo].Length; this.OnKeyDown(e); } else // 空行不留痕直接默认处理 { base.OnKeyDown(e); } return; } else // 不是第一个Item,也不是在Item最前面 if (vData.Items[vData.SelectInfo.StartItemNo] is DeItem) // 文本 { DeItem vDeItem = vData.Items[vData.SelectInfo.StartItemNo] as DeItem; vText = vDeItem.SubString(vData.SelectInfo.StartItemOffset, 1); vStyleNo = vDeItem.StyleNo; vParaNo = vDeItem.ParaNo; vCurStyleEx = vDeItem.StyleEx; vCurTrace = vDeItem[DeProp.Trace]; } } else if (e.KeyCode == Keys.Delete) // 后删 { if ((vData.SelectInfo.StartItemNo == vData.Items.Count - 1) && (vData.SelectInfo.StartItemOffset == vData.Items[vData.Items.Count - 1].Length)) { return; // 最后一个最后面则不处理 } else if (vData.SelectInfo.StartItemOffset == vData.Items[vData.SelectInfo.StartItemNo].Length) // 最后面,移动到后一个最前面处理 { vData.SelectInfo.StartItemNo = vData.SelectInfo.StartItemNo + 1; vData.SelectInfo.StartItemOffset = 0; this.OnKeyDown(e); return; } else // 不是最后一个Item,也不是在Item最后面 if (vData.Items[vData.SelectInfo.StartItemNo] is DeItem) // 文本 { DeItem vDeItem = vData.Items[vData.SelectInfo.StartItemNo] as DeItem; vText = vDeItem.SubString(vData.SelectInfo.StartItemOffset + 1, 1); vStyleNo = vDeItem.StyleNo; vParaNo = vDeItem.ParaNo; vCurStyleEx = vDeItem.StyleEx; vCurTrace = vDeItem[DeProp.Trace]; } } // 删除掉的内容以痕迹的形式插入 this.BeginUpdate(); try { base.OnKeyDown(e); if (FTrace && (vText != "")) // 有删除的内容 { if ((vCurStyleEx == StyleExtra.cseAdd) && (vCurTrace == "")) // 新添加未生效痕迹可以直接删除 { return; } // 创建删除字符对应的Item DeItem vDeItem = new DeItem(); vDeItem.Text = vText; vDeItem.StyleNo = vStyleNo; vDeItem.ParaNo = vParaNo; if ((vCurStyleEx == StyleExtra.cseDel) && (vCurTrace == "")) // 原来是删除未生效痕迹 { vDeItem.StyleEx = StyleExtra.cseNone; // 取消删除痕迹 } else // 生成删除痕迹 { vDeItem.StyleEx = StyleExtra.cseDel; } // 插入删除痕迹Item HCCustomItem vCurItem = vData.Items[vData.SelectInfo.StartItemNo]; if (vData.SelectInfo.StartItemOffset == 0) // 在Item最前面 { if (vDeItem.CanConcatItems(vCurItem)) // 可以合并 { vCurItem.Text = vDeItem.Text + vCurItem.Text; if (e.KeyCode == Keys.Delete) // 后删 { vData.SelectInfo.StartItemOffset = vData.SelectInfo.StartItemOffset + 1; } this.ActiveSection.ReFormatActiveItem(); } else // 不能合并 { vDeItem.ParaFirst = vCurItem.ParaFirst; vCurItem.ParaFirst = false; this.InsertItem(vDeItem); if (e.KeyCode == Keys.Back) // 回删 { vData.SelectInfo.StartItemOffset = vData.SelectInfo.StartItemOffset - 1; } } } else if (vData.SelectInfo.StartItemOffset == vCurItem.Length) // 在Item最后面 { if (vCurItem.CanConcatItems(vDeItem)) // 可以合并 { vCurItem.Text = vCurItem.Text + vDeItem.Text; if (e.KeyCode == Keys.Delete) // 后删 { vData.SelectInfo.StartItemOffset = vData.SelectInfo.StartItemOffset + 1; } this.ActiveSection.ReFormatActiveItem(); } else // 不可以合并 { this.InsertItem(vDeItem); if (e.KeyCode == Keys.Back) // 回删 { vData.SelectInfo.StartItemOffset = vData.SelectInfo.StartItemOffset - 1; } } } else // 在Item中间 { this.InsertItem(vDeItem); if (e.KeyCode == Keys.Back) // 回删 { vData.SelectInfo.StartItemOffset = vData.SelectInfo.StartItemOffset - 1; } } } } finally { this.EndUpdate(); } } else { base.OnKeyDown(e); } } else { base.OnKeyDown(e); } }