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);
        }
Exemple #3
0
        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);
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        /// <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);
            }
        }