public override bool Edit(ElementEditEventArgs args) { using (dlgImageElementEditor dlg = new dlgImageElementEditor()) { dlg.SourceEventArgs = args; if (dlg.ShowDialog(args.ParentWindow) == DialogResult.OK) { return(true); } else { return(false); } } //XTextImageElement img = (XTextImageElement)args.Element; //using (OpenFileDialog dlg = new OpenFileDialog()) //{ // dlg.Filter = WriterStrings.ImageFileFilter; // dlg.CheckFileExists = true; // dlg.ShowReadOnly = false; // if (dlg.ShowDialog(args.ParentWindow) == DialogResult.OK) // { // img.OwnerDocument = args.Document; // XImageValue newValue = new XImageValue(); // if (newValue.Load(dlg.FileName) > 0 ) // { // SizeF oldSize = new SizeF(img.Width, img.Height); // XImageValue oldValue = img.Image ; // img.Image = newValue; // img.UpdateSize(); // if (args.LogUndo && args.Document.CanLogUndo ) // { // // 记录撤销操作信息 // args.Document.UndoList.AddProperty("Width", oldSize.Width, img.Width, img); // args.Document.UndoList.AddProperty("Height", oldSize.Height, img.Height, img); // args.Document.UndoList.AddProperty("Image", oldValue, img.Image, img); // } // if (args.Method == ElementEditMethod.Edit) // { // img.ContentElement.RefreshPrivateContent(img.ViewIndex); // img.UpdateContentVersion(); // ContentChangedEventArgs args2 = new ContentChangedEventArgs(); // args2.Document = args.Document; // args2.Element = img; // args2.LoadingDocument = false; // img.Parent.RaiseBubbleOnContentChanged(args2); // } // return true; // } // } //} //return false; }
/// <summary> /// 调用文档元素编辑器 /// </summary> /// <param name="args">编辑器命令参数对象</param> /// <param name="element">文档元素对象</param> /// <param name="method">编辑使用的方法</param> /// <returns>操作是否成功</returns> internal static bool CallElementEdtior(WriterCommandEventArgs args, DomElement element, ElementEditMethod method) { ElementEditor editor = (ElementEditor)TypeDescriptor.GetEditor(element, typeof(ElementEditor)); if (editor != null) { ElementEditEventArgs ea = new ElementEditEventArgs(); ea.Document = args.Document; ea.Host = args.Host; ea.LogUndo = (method == ElementEditMethod.Edit); ea.ParentWindow = args.EditorControl; ea.Element = element; ea.Method = method; return(editor.Edit(ea)); } return(false); }
protected void ElementProperties(object sender, WriterCommandEventArgs args) { if (args.Mode == WriterCommandEventMode.QueryState) { args.Enabled = args.DocumentControler != null && args.DocumentControler.CanSetStyle; } else if (args.Mode == WriterCommandEventMode.Invoke) { args.Result = false; DomElement element = args.Document.CurrentElement; if (args.Document.Selection.ContentElements.Count == 1) { element = args.Document.Selection.ContentElements[0]; } while (element != null) { ElementEditor editor = (ElementEditor)TypeDescriptor.GetEditor(element, typeof(ElementEditor)); if (editor != null) { if (editor.IsSupportMethod(ElementEditMethod.Edit)) { // 调用指定的编辑器 ElementEditEventArgs ea = new ElementEditEventArgs(); ea.Document = args.Document; ea.Element = element; ea.Host = args.Host; ea.LogUndo = true; ea.Method = ElementEditMethod.Edit; bool changed = false; args.Document.BeginLogUndo(); if (editor.Edit(ea)) { // 更新元素内容版本号 if (element is DomContainerElement) { DomContainerElement c = (DomContainerElement)element; c.EditorInvalidateContent(); } element.UpdateContentVersion(); element.InvalidateView(); changed = true; } args.Document.EndLogUndo(); if (changed) { args.Result = true; args.Document.Modified = true; //args.Document.OnSelectionChanged(); args.Document.OnDocumentContentChanged(); args.RefreshLevel = UIStateRefreshLevel.All; } } return; } element = element.Parent; }//while element = args.Document.CurrentElement; if (args.Document.Selection.ContentElements.Count == 1) { element = args.Document.Selection.ContentElements[0]; } XTextElementProperties properties = null; while (element != null) { properties = args.Host.CreateProperties(element.GetType()); if (properties != null) { break; } element = element.Parent; }//while if (properties != null) { properties.Document = args.Document; if (properties.ReadProperties(element)) { args.SourceElement = element; if (properties.PromptEditProperties(args)) { args.Document.BeginLogUndo(); bool changed = false; if (properties.ApplyToElement(args.Document, element, true)) { // 更新元素内容版本号 if (element is DomContainerElement) { DomContainerElement c = (DomContainerElement)element; c.EditorInvalidateContent(); } element.UpdateContentVersion(); element.InvalidateView(); changed = true; } args.Document.EndLogUndo(); if (changed) { args.Result = true; args.Document.Modified = true; //args.Document.OnSelectionChanged(); args.Document.OnDocumentContentChanged(); args.RefreshLevel = UIStateRefreshLevel.All; } } } } } }