/// <summary> /// Construction. Some initialization is done here, the rest of the initialiation is /// deferred until the document readyState is "complete" /// </summary> public MshtmlEditor(IServiceProviderRaw serviceProvider, MshtmlOptions mshtmlOptions, bool protectFocus) { // initialize properties BackColor = SystemColors.Window; // initialize MSHTML InitializeMshtmlControl(serviceProvider, mshtmlOptions, protectFocus); _active = true; // watch for ReadyState == "complete" so we can finish initialization once // the document is loaded mshtmlControl.DocumentEvents.ReadyStateChanged += new EventHandler(ReadyStateChangedHandler); }
//ToDo: OLW Spell Checker //public BlogPostHtmlEditorControl(IMainFrameWindow mainFrameWindow, IStatusBar statusBar, MshtmlOptions options, IBlogPostImageEditingContext imageEditingContext, IBlogPostSidebarContext sidebarContext, IContentSourceSidebarContext sourceContext, SmartContentResizedListener resizedListener, IBlogPostSpellCheckingContext spellingContext, IImageReferenceFixer referenceFixer, IInternetSecurityManager internetSecurityManager, CommandManager commandManager, TemplateStrategy strategy, IEditingMode editingModeContext) : base(mainFrameWindow, statusBar, options, internetSecurityManager, commandManager) public BlogPostHtmlEditorControl(IMainFrameWindow mainFrameWindow, IStatusBar statusBar, MshtmlOptions options, IBlogPostImageEditingContext imageEditingContext, IBlogPostSidebarContext sidebarContext, IContentSourceSidebarContext sourceContext, SmartContentResizedListener resizedListener, IImageReferenceFixer referenceFixer, IInternetSecurityManager internetSecurityManager, CommandManager commandManager, TemplateStrategy strategy, IEditingMode editingModeContext) : base(mainFrameWindow, statusBar, options, internetSecurityManager, commandManager) { _strategy = strategy; _imageEditingContext = imageEditingContext; _sidebarContext = sidebarContext; _sourceContext = sourceContext; _resizedListener = resizedListener; //ToDo: OLW Spell Checker //_spellingContext = spellingContext; //_spellingManager = new SpellingManager(CommandManager); _keyBoardHandler = new PostEditorKeyboardHandler(this, imageEditingContext, editingModeContext); _referenceFixer = referenceFixer; InitializeTableEditingManager(); InitializeElementBehaviors(); SelectionChanged += BlogPostHtmlEditorControl_SelectionChanged; KeyPress += new HtmlEventHandler(BlogPostHtmlEditorControl_KeyPress); }
public void UpdateOptions(MshtmlOptions options, bool updateComposeSettings) { _mshtmlOptions = options; // If the document has already loaded then we need to apply the settings // again right away so they take effect if (_documentCompleteReadyStateFired) InitializeDocumentEditingOptions(updateComposeSettings); }
/// <summary> /// Create the MSHTML control and add it to our client area /// </summary> private void InitializeMshtmlControl(IServiceProviderRaw serviceProvider, MshtmlOptions mshtmlOptions, bool protectFocus) { UpdateOptions(mshtmlOptions, true); // initialize mshtml control mshtmlControl = new MshtmlControl(serviceProvider, protectFocus); mshtmlControl.InstallDocHostUIHandler(this); mshtmlControl.SetDLControlFlags(mshtmlOptions.DLCTLOptions); mshtmlControl.Init(); mshtmlControl.SetEditMode(true); // get a reference to the htmlDocument htmlDocument = mshtmlControl.HTMLDocument; /// Hook Mshtml document GotFocus so we can notify .NET when our control /// gets focus (allows Enter and Leave events to be fired correctly so /// that commands can be managed correctly) mshtmlControl.DocumentEvents.GotFocus += new EventHandler(DocumentEvents_GotFocus); // add the control to our client area mshtmlControl.Dock = DockStyle.Fill; Controls.Add(mshtmlControl); }
public HtmlEditorControl(IMainFrameWindow mainFrameWindow, IStatusBar statusBar, MshtmlOptions options, ISpellingChecker spellingChecker, IInternetSecurityManager internetSecurityManager, CommandManager commandManager) { _commandManager = commandManager; // save reference to main frame window _mainFrameWindow = mainFrameWindow; _statusBar = statusBar; _spellingChecker = spellingChecker; // This call is required by the Windows.Forms Form Designer. InitializeComponent(); //initialize the data format handlers for this control DataFormatHandlerFactory = new HtmlEditorMarshallingHandler(this); MarshalImagesSupported = true; MarshalFilesSupported = true; MarshalUrlSupported = true; MarshalHtmlSupported = true; MarshalTextSupported = true; // The version host service provider tells MSHTML what feature versions are available (e.g. VML 1.0). VersionHostServiceProvider = new VersionHostServiceProvider(new DisableVmlVersionHost()); // initialize the html editor if (_editorCache == null) { _internetSecurityManager = new InternetSecurityManagerShim(internetSecurityManager); // If mainFrameWindow == null, then we are pre-caching mshtml and don't want it to steal focus _mshtmlEditor = new MshtmlEditor(this, options, (mainFrameWindow == null)); } else { _mshtmlEditor = _editorCache.Editor; _internetSecurityManager = _editorCache.SecurityManager; _internetSecurityManager.SecurityManager = internetSecurityManager; _editorCache = null; _mshtmlEditor.Active = true; _mshtmlEditor.MshtmlControl.ProtectFocus = false; _mshtmlEditor.ClearContextMenuHandlers(); _mshtmlEditor.SetServiceProvider(this); _mshtmlEditor.UpdateOptions(options, true); } _mshtmlOptions = options; this.DefaultBlockElement = _mshtmlOptions.UseDivForCarriageReturn ? (DefaultBlockElement)new DivDefaultBlockElement() : new ParagraphDefaultBlockElement(); PostEditorEvent += new MshtmlEditor.EditDesignerEventHandler(HtmlEditorControl_PostEditorEvent); HandleClear += new HtmlEditorSelectionOperationEventHandler(TryMoveIntoNextTable); // Hook the editor into the stream of the security manager so we // can allow our own objects (smart content, image resizing) to load in the editor _internetSecurityManager.HandleProcessUrlAction = HandleProcessUrlAction; // Automation uses this to find the editor to automate it _mshtmlEditor.Name = "BorderControl"; // subscribe to key events _mshtmlEditor.DocumentComplete += new EventHandler(_mshtmlEditor_DocumentComplete); _mshtmlEditor.DocumentEvents.GotFocus += htmlEditor_GotFocus; _mshtmlEditor.DocumentEvents.LostFocus += htmlEditor_LostFocus; _mshtmlEditor.DocumentEvents.KeyDown += new HtmlEventHandler(DocumentEvents_KeyDown); _mshtmlEditor.DocumentEvents.KeyUp += new HtmlEventHandler(DocumentEvents_KeyUp); _mshtmlEditor.DocumentEvents.KeyPress += new HtmlEventHandler(DocumentEvents_KeyPress); _mshtmlEditor.DocumentEvents.MouseDown += new HtmlEventHandler(DocumentEvents_MouseDown); _mshtmlEditor.DocumentEvents.MouseUp += new HtmlEventHandler(DocumentEvents_MouseUp); _mshtmlEditor.DocumentEvents.SelectionChanged += new EventHandler(DocumentEvents_SelectionChanged); _mshtmlEditor.DisplayChanged += new EventHandler(_mshtmlEditor_DisplayChanged); _mshtmlEditor.DocumentEvents.Click += new HtmlEventHandler(DocumentEvents_Click); _mshtmlEditor.CommandKey += new KeyEventHandler(_mshtmlEditor_CommandKey); _mshtmlEditor.DropTargetHandler = new MshtmlEditor.DropTargetUIHandler(_mshtmlEditor_GetDropTarget); _mshtmlEditor.BeforeShowContextMenu += new EventHandler(_mshtmlEditor_BeforeShowContextMenu); _mshtmlEditor.MshtmlControl.DLControlFlagsChanged += new EventHandler(_mshtmlControl_DLControlFlagsChanged); _mshtmlEditor.TranslateAccelerator += new HtmlEditDesignerEventHandler(_mshtmlEditor_TranslateAccelerator); InitDamageServices(); // notify subclasses that the editor has been created OnEditorCreated(); }
public void UpdateOptions(MshtmlOptions options, bool updateComposeSettings) { if (options.EditingOptions.Contains(IDM.COMPOSESETTINGS)) { CurrentDefaultFont = new MshtmlFontWrapper(options.EditingOptions[IDM.COMPOSESETTINGS].ToString()); CurrentDefaultFont.ApplyFontToBody((IHTMLDocument2)PostBodyElement.document); } MshtmlEditor.UpdateOptions(options, updateComposeSettings); }
private void InitializeNormalEditor(IBlogPostEditingSite postEditingSite, IInternetSecurityManager internetSecurityManager, BlogPostHtmlEditorControl.TemplateStrategy templateStrategy, int dlControlFlags) { // configure editing options _mshtmlOptions = new MshtmlOptions(); _mshtmlOptions.UseDivForCarriageReturn = GlobalEditorOptions.SupportsFeature(ContentEditorFeature.DivNewLine); // Commented out for now to prevent first chance exception //_mshtmlOptions.EditingOptions.Add(IDM.RESPECTVISIBILITY_INDESIGN, GlobalEditorOptions.SupportsFeature(ContentEditorFeature.HideNonVisibleElements)); _mshtmlOptions.EditingOptions.Add(IDM.AUTOURLDETECT_MODE, false); _mshtmlOptions.EditingOptions.Add(IDM.MULTIPLESELECTION, false); _mshtmlOptions.EditingOptions.Add(IDM.LIVERESIZE, true); _mshtmlOptions.EditingOptions.Add(IDM.KEEPSELECTION, true); _mshtmlOptions.EditingOptions.Add(IDM.DISABLE_EDITFOCUS_UI, true); _mshtmlOptions.DLCTLOptions = dlControlFlags; _mshtmlOptions.DocHostUIOptionKeyPath = GlobalEditorOptions.GetSetting<string>(ContentEditorSetting.MshtmlOptionKeyPath); // create the editor _normalHtmlContentEditor = new BlogPostHtmlEditorControl(_mainFrameWindow, StatusBar, _mshtmlOptions, this, this, this, new SmartContentResizedListener(ResizedListener), new SharedCanvasImageReferenceFixer(ReferenceFixer), internetSecurityManager, CommandManager, templateStrategy, this); _normalHtmlContentEditor.PostBodyInlineStyle = GetPostBodyInlineStyleOverrides(); // hookup services and events _normalHtmlContentEditor.HtmlGenerationService = new HtmlGenerator(this); _normalHtmlContentEditor.DataFormatHandlerFactory = new ExtendedHtmlEditorMashallingHandler(_normalHtmlContentEditor, this, this, postEditingSite as IDropTarget); _normalHtmlContentEditor.DocumentComplete += new EventHandler(htmlEditor_DocumentComplete); _normalHtmlContentEditor.GotFocus += htmlEditor_GotFocus; _normalHtmlContentEditor.LostFocus += htmlEditor_LostFocus; _normalHtmlContentEditor.SelectedImageResized += new SelectedImageResizedHandler(_normalHtmlContentEditor_SelectedImageResized); _normalHtmlContentEditor.UpdateImageLink += new UpdateImageLinkHandler(_normalHtmlContentEditor_UpdateImageLink); _normalHtmlContentEditor.HtmlInserted += new EventHandler(_normalHtmlContentEditor_HtmlInserted); _normalHtmlContentEditor.HelpRequest += new EventHandler(_normalHtmlContentEditor_HelpRequest); _normalHtmlContentEditor.EditorControl.AccessibleName = "Editor"; _normalHtmlContentEditor.KeyboardLanguageChanged += new EventHandler(_normalHtmlContentEditor_KeyboardLanguageChanged); _normalHtmlContentEditor.TrackKeyboardLanguageChanges = true; // initialize the sidebar _htmlEditorSidebarHost = new HtmlEditorSidebarHost(_normalHtmlContentEditor); _htmlEditorSidebarHost.Dock = !BidiHelper.IsRightToLeft ? DockStyle.Right : DockStyle.Left; _htmlEditorSidebarHost.Width = Res.SidebarWidth; if (BidiHelper.IsRightToLeft) { _htmlEditorSidebarHost.RightToLeft = RightToLeft.Yes; BidiHelper.RtlLayoutFixup(_htmlEditorSidebarHost); } _editorContainer.Controls.Add(_htmlEditorSidebarHost); _htmlEditorSidebarHost.BringToFront(); _htmlEditorSidebarHost.VisibleChanged += _htmlEditorSidebarHost_VisibleChanged; // register sidebars _htmlEditorSidebarHost.RegisterSidebar(new DisabledContentSourceSidebar(this)); _htmlEditorSidebarHost.RegisterSidebar(new BrokenContentSourceSidebar(this)); _htmlEditorSidebarHost.RegisterSidebar(new ContentSourceSidebar(this)); _htmlEditorSidebarHost.RegisterSidebar(new ImagePropertiesSidebar(_normalHtmlContentEditor, this, new CreateFileCallback(CreateFileHandler))); _htmlEditorSidebarHost.AccessibleName = "Sidebar"; // register the normal editor RegisterEditor(_normalHtmlContentEditor); }