Ejemplo n.º 1
0
        protected void LoadItemFromStreamAlone(Stream aStream, ref HCCustomItem aItem)
        {
            string vFileExt     = "";
            ushort vFileVersion = 0;
            byte   vLan         = 0;

            aStream.Position = 0;
            HC._LoadFileFormatAndVersion(aStream, ref vFileExt, ref vFileVersion, ref vLan);  // 文件格式和版本
            if ((vFileExt != HC.HC_EXT) && (vFileExt != "cff."))
            {
                throw new Exception("加载失败,不是" + HC.HC_EXT + "文件!");
            }

            int vStyleNo = HCStyle.Null;

            byte[] vBuffer = BitConverter.GetBytes(vStyleNo);
            aStream.Read(vBuffer, 0, vBuffer.Length);
            vStyleNo = BitConverter.ToInt32(vBuffer, 0);

            if (aItem == null)
            {
                aItem = CreateItemByStyle(vStyleNo);
            }

            aItem.LoadFromStream(aStream, null, vFileVersion);

            if (vStyleNo > HCStyle.Null)
            {
                HCTextStyle vTextStyle = new HCTextStyle();
                try
                {
                    vTextStyle.LoadFromStream(aStream, vFileVersion);
                    vStyleNo      = Style.GetStyleNo(vTextStyle, true);
                    aItem.StyleNo = vStyleNo;
                }
                finally
                {
                    vTextStyle.Dispose();
                }
            }

            int         vParaNo    = -1;
            HCParaStyle vParaStyle = new HCParaStyle();

            try
            {
                vParaStyle.LoadFromStream(aStream, vFileVersion);
                vParaNo = Style.GetParaNo(vParaStyle, true);
            }
            finally
            {
                vParaStyle.Dispose();
            }

            aItem.ParaNo = vParaNo;
        }
Ejemplo n.º 2
0
        protected void DataLoadLiteStream(Stream stream, HCLoadProc proc)
        {
            string vFileFormat  = "";
            ushort vFileVersion = 0;
            byte   vLang        = 0;

            HC._LoadFileFormatAndVersion(stream, ref vFileFormat, ref vFileVersion, ref vLang);
            using (HCStyle vStyle = new HCStyle())
            {
                vStyle.LoadFromStream(stream, vFileVersion);
                proc(vFileVersion, vStyle);
            }
        }
Ejemplo n.º 3
0
        public void LoadFromStream(Stream aStream)
        {
            this.BeginUpdate();
            try
            {
                // 清除撤销恢复数据
                FUndoList.Clear();
                FUndoList.SaveState();
                try
                {
                    FUndoList.Enable = false;

                    FData.Clear();
                    FStyle.Initialize();

                    aStream.Position = 0;
                    string vFileExt  = "";
                    ushort viVersion = 0;
                    byte   vLang     = 0;
                    HC._LoadFileFormatAndVersion(aStream, ref vFileExt, ref viVersion, ref vLang);
                    if (vFileExt != HC.HC_EXT)
                    {
                        throw new Exception("加载失败,不是" + HC.HC_EXT + "文件!");
                    }

                    FStyle.LoadFromStream(aStream, viVersion);
                    FData.LoadFromStream(aStream, FStyle, viVersion);
                    DoMapChanged();
                }
                finally
                {
                    FUndoList.RestoreState();
                }
            }
            finally
            {
                this.EndUpdate();
            }
        }
Ejemplo n.º 4
0
        private void DoLoadFromStream(Stream stream, HCStyle style, LoadSectionProcHandler loadSectionProc)
        {
            stream.Position = 0;
            string vFileExt     = "";
            ushort vFileVersion = 0;
            byte   vLang        = 0;

            HC._LoadFileFormatAndVersion(stream, ref vFileExt, ref vFileVersion, ref vLang);
            if (vFileExt != HC.HC_EXT)
            {
                throw new Exception("加载失败,不是" + HC.HC_EXT + "文件!");
            }

            if (vFileVersion > HC.HC_FileVersionInt)
            {
                throw new Exception("加载失败,当前编辑器最高支持版本为"
                                    + HC.HC_FileVersionInt.ToString() + "的文件,无法打开版本为" + vFileVersion.ToString() + "的文件!");
            }

            DoLoadStreamBefor(stream, vFileVersion);    // 触发加载前事件
            style.LoadFromStream(stream, vFileVersion); // 加载样式表
            loadSectionProc(vFileVersion);              // 加载节数量、节数据
            DoLoadStreamAfter(stream, vFileVersion);
        }
Ejemplo n.º 5
0
        protected void Paste()
        {
            IDataObject vIData = Clipboard.GetDataObject();

            if (vIData.GetDataPresent(HC.HC_EXT))
            {
                MemoryStream vStream = (MemoryStream)vIData.GetData(HC.HC_EXT);
                try
                {
                    string vFileFormat  = "";
                    ushort vFileVersion = 0;
                    byte   vLan         = 0;

                    vStream.Position = 0;
                    HC._LoadFileFormatAndVersion(vStream, ref vFileFormat, ref vFileVersion, ref vLan);  // 文件格式和版本
                    HCStyle vStyle = new HCStyle();
                    try
                    {
                        vStyle.LoadFromStream(vStream, vFileVersion);
                        this.BeginUpdate();
                        try
                        {
                            FData.InsertStream(vStream, vStyle, vFileVersion);
                        }
                        finally
                        {
                            this.EndUpdate();
                        }
                    }
                    finally
                    {
                        vStyle.Dispose();
                    }
                }
                finally
                {
                    vStream.Close();
                    vStream.Dispose();
                }
            }
            else
            if (vIData.GetDataPresent(DataFormats.Text))
            {
                FData.InsertText(Clipboard.GetText());
            }
            else
            if (vIData.GetDataPresent(DataFormats.Bitmap))
            {
                Image vImage = (Image)vIData.GetData(typeof(Bitmap));

                HCRichData  vTopData   = FData.GetTopLevelData() as HCRichData;
                HCImageItem vImageItem = new HCImageItem(vTopData);

                vImageItem.Image = new Bitmap(vImage);

                vImageItem.Width  = vImageItem.Image.Width;
                vImageItem.Height = vImageItem.Image.Height;


                vImageItem.RestrainSize(vTopData.Width, vImageItem.Height);

                FData.InsertItem(vImageItem);
            }
        }