/// <summary> /// 载入矩形数据 /// </summary> /// <param name="tmpltID"></param> private void LoadRects(XmlDocument doc) { DrawPanel.ListRect.SnipRectList.Clear(); XmlNodeList rectNodes = doc.DocumentElement.SelectNodes(@"//snip"); SnipRect rect; int x, y, width, height; string id; //载入所有矩形 foreach (XmlNode node in rectNodes) { if (node is XmlElement) { XmlElement ele = (XmlElement)node; id = ele.GetAttribute("id"); x = Utility.Convert.PxStringToInt(ele.GetAttribute("x")); y = Utility.Convert.PxStringToInt(ele.GetAttribute("y")); width = Utility.Convert.PxStringToInt(ele.GetAttribute("width")); height = Utility.Convert.PxStringToInt(ele.GetAttribute("height")); rect = new SnipRect(x, y, width, height, id); //rect.IsSelected = Utility.Convert.StringToBool(ele.GetAttribute("isSelected")); rect.IsLocked = Utility.Convert.StringToBool(ele.GetAttribute("isLocked")); rect.HasSnip = Utility.Convert.StringToBool(ele.GetAttribute("hasSnip")); rect.SnipType = (PageSnipType)Enum.Parse(typeof(PageSnipType), ele.GetAttribute("type")); rect.SnipName = ele.GetAttribute("snipName"); rect.ToCss = ele.GetAttribute("css"); DrawPanel.ListRect.SnipRectList.Add(rect); } } }
/// <summary> /// 初始化 /// </summary> /// <param name="rect"></param> private void Init(SnipRect rect) { if (rect == null) { return; } SnipID = rect.SnipID; SnipName = rect.SnipName; }
/// <summary> /// 矩形元素重画 /// </summary> /// <param name="rect"></param> /// <param name="g"></param> public override void DrawRect(Rect rect, Graphics g) { Pen penBlack = new Pen(Color.Black, PenSize); Pen penSelected = new Pen(this.SelectedRectColor, PenSize * BoldPenTimes); if (rect.IsDeleted) { return; } Rectangle rectangle = new Rectangle( rect.X, rect.Y, rect.Width, rect.Height); Rectangle rectangle2 = new Rectangle( rect.X, rect.Y, rect.Width + 5, rect.Height + 5); if (rect.IsSelected) { g.FillRectangle(RectSelectedBrush, rectangle); g.DrawRectangle(Pens.Black, rectangle); g.DrawImage(_selectedImg, new PointF(rectangle.X + penBlack.Width, rectangle.Y + penBlack.Width));//画选择标志 } else { g.DrawRectangle(penBlack, rectangle); } if (rect.IsLocked) { g.FillRectangle(LockedBrush, rectangle); g.DrawImage(_lockedImg, new PointF(rectangle.X + 20 + penBlack.Width, rectangle.Y + penBlack.Width));//画选择标志 } if (rect is SnipRect) { SnipRect sRect = (SnipRect)rect; if (!sRect.HasSnip) { } else if (sRect.SnipType != PageSnipType.Content) { g.FillRectangle(HasSnipBrush, rectangle); g.DrawImage(_hasSnip, new PointF(rectangle.X + penBlack.Width, rectangle.Y + 20 + penBlack.Width));//画选择标志 } else if (sRect.SnipType == PageSnipType.Content) { g.FillRectangle(HasContentSnipBrush, rectangle); g.DrawImage(_hasContentSnip, new PointF(rectangle.X + penBlack.Width, rectangle.Y + 20 + penBlack.Width)); //画选择标志 } } //释放资源 penBlack.Dispose(); penSelected.Dispose(); }
public ChangeSnipPerpertyCommand(DesignPanel tdPanel, SnipRect pastedSnipRect, SnipData newData) { PastedSnipRect = pastedSnipRect; NewSnipData = newData; OldSnipData = new SnipData(pastedSnipRect.SnipData); TDPanel = tdPanel; TDPanel.Modified = true; CommandInfo = "更改页面片属性"; }
/// <summary> /// 工厂模式动态创建Rect /// </summary> override public Rect CreateRect(int x, int y, int width, int height, Rect rect) { SnipRect newSnipRect = new SnipRect(x, y, width, height, Guid.NewGuid().ToString("N")); ///复制页面片数据 if (((SnipRect)rect).SnipData != null) { newSnipRect.SnipData = new SnipData(((SnipRect)rect).SnipData); } return(newSnipRect); }
/// <summary> /// 保存页面片的节点 /// </summary> /// <param name="rect">页面片所在的矩形</param> private void SaveSnipElement(SnipRect rect) { if (radioButtonContent.Checked) { SnipType = PageSnipType.Content; IsContent = true; } else { SnipType = PageSnipType.General; IsContent = false; } }
/// <summary> /// 递归实现 矩形向Xml 节点的转换 /// </summary> /// <param name="parentEle"></param> /// <param name="rect"></param> void AddRectToXml(XmlElement parentEle, RectTreeNode rect) { Rect resultRect = DrawPanel.ListRect.SnipRectList.Find( new FindRectByLayerRect(rect.RectLayer).PredicateEqualRect); if (resultRect != null) { //由一个矩形(SnipRect)生成一个XmlElement节点 SnipRect srect = (SnipRect)resultRect; SnipXmlElement snipXmlEle = (SnipXmlElement)TmpltDoc.CreateElement("snip");//CreateSnip(srect.SnipID); SnipPartsXmlElement partsEle = (SnipPartsXmlElement)TmpltDoc.CreateElement("parts"); snipXmlEle.AppendChild(partsEle); snipXmlEle.Id = srect.SnipID; snipXmlEle.SnipName = srect.SnipName; snipXmlEle.Title = srect.Title; snipXmlEle.Css = srect.ToCss; snipXmlEle.HasSnip = srect.HasSnip; snipXmlEle.SnipType = srect.SnipType; if (srect.SnipType == PageSnipType.Content) { TmpltDoc.HasContentSnip = true; } else { TmpltDoc.HasContentSnip = false; } snipXmlEle.X = srect.X; snipXmlEle.Y = srect.Y; snipXmlEle.Width = srect.Width.ToString() + "px"; snipXmlEle.Height = srect.Height.ToString() + "px"; snipXmlEle.IsLocked = srect.IsLocked; rect.Element = snipXmlEle; } else { SnipRectXmlElement rectEle = (SnipRectXmlElement)TmpltDoc.CreateElement("rect"); rectEle.Css = rect.RectLayer.Css; rectEle.IsRow = !rect.RectLayer.IsRow; rect.Element = rectEle; //如果有孩子,则继续遍历 if (rect.RectLayer.ChildRects != null) { foreach (RectLayer childRect in rect.RectLayer.ChildRects) { AddRectToXml(rect.Element, new RectTreeNode(childRect, null)); } } } parentEle.AppendChild(rect.Element); }
/// <summary> /// 构造页面片 /// </summary> /// <param name="tmpltID">当前模板ID</param> /// <param name="rect">当前矩形(区域)</param> /// <param name="parentHasContentSnip">当前模板是否已有正文型页面片</param> public NewSnipSetupForm(XmlDocument doc, SnipRect rect, bool parentHasContentSnip) { InitializeComponent(); _doc = doc; TmpltType _type = (TmpltType)Enum.Parse(typeof(TmpltType), doc.DocumentElement.GetAttribute("type")); if (_type == TmpltType.Home) { groupBoxDoWhat.Visible = false; this.Height = 94; } _snipRect = rect; _parentHasContentSnip = parentHasContentSnip; _initSnipWidth = rect.Width.ToString() + "px"; Init(rect); }
/// <summary> /// 拷贝页面片数据 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void CopySnipData_Click(object sender, EventArgs e) { if (ListRect.GetSelectedRects().Count == 1) { SnipRect rect = (SnipRect)ListRect.GetSelectedRects()[0]; if (rect.HasSnip) { rect.SnipData = new SnipData(TmpltDoc.GetSnipElementById(rect.SnipID)); rect.CopyToClipboard(); } else { MessageService.Show(StringParserService.Parse("${res:tmpltDesign.tmpltDrawPanel.message.hasNoneSnip}")); } } }
/// <summary> /// 打开或添加页面片属性 /// </summary> /// <param name="selectedRect"></param> private void ChangeSnipPerperty(SnipRect selectedRect) { if (selectedRect.HasSnip) { ///打开页面片 Form snipForm = Service.Workbench.OpenWorkDocument(WorkDocumentType.SnipDesigner, selectedRect.SnipID, (TDPanel as TmpltDesignerPanel).TmpltID); } else { TmpltXmlDocument doc = TmpltDoc; TmpltDesignerPanel tDpanel = TDPanel as TmpltDesignerPanel; //tDpanel.SaveTmplt(doc); tDpanel.SaveRects(); NewSnipSetupForm form = new NewSnipSetupForm(doc, selectedRect, GetHasContentSnip()); if (form.ShowDialog() == DialogResult.OK) { SnipXmlElement snipElement = doc.GetSnipElementById(selectedRect.SnipID); snipElement.SnipName = form.SnipName; snipElement.SnipType = form.SnipType; snipElement.Width = selectedRect.Width.ToString() + "px"; snipElement.Height = selectedRect.Height.ToString() + "px"; snipElement.Title = form.SnipName; snipElement.HasSnip = true; tDpanel.SaveRects(); selectedRect.HasSnip = true; TDPanel.Modified = true; selectedRect.SnipType = form.IsContent ? PageSnipType.Content : PageSnipType.General; if (form.IsContent) { if (!doc.HasContentSnip) { doc.HasContentSnip = true; } } TDPanel.HasContentSnip = form.IsContent; ///打开页面片 Form snipForm = Service.Workbench.OpenWorkDocument(WorkDocumentType.SnipDesigner, selectedRect.SnipID, (TDPanel as TmpltDesignerPanel).TmpltID); } } }
/// <summary> /// 响应当前矩形Css属性 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void CurRectProperty_Click(object sender, EventArgs e) { ((TmpltDesignerPanel)TDPanel).SaveTmplt(TmpltDoc); Rect selectedRect = ListRect.GetSelectedRect(FirstRealPoint, SelectPrecision); if (selectedRect is SnipRect) { SnipRect snipRect = (SnipRect)selectedRect; SnipXmlElement ele = TmpltDoc.GetSnipElementById(snipRect.SnipID); //writed by zhenghao 2008.05.20 CssSettingForm form = new CssSettingForm(snipRect.ToCss); form.Owner = this.FindForm(); if (form.ShowDialog() == DialogResult.OK) { snipRect.ToCss = form.CssText; ele.Css = snipRect.ToCss; this.DrawFrame.TDPanel.Modified = true; } } }
/// <summary> /// 属性菜单执行函数 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void SnipPerperty_Click(object sender, EventArgs e) { SnipRect selectedRect = (SnipRect)ListRect.GetSelectedRects()[0]; ChangeSnipPerperty(selectedRect); }