private void GetMouseCursor(DragDropCommands element) { string s = "GuruComponents.Netrix.Resources.DragCursors."; switch (element) { case DragDropCommands.DefaultNot: this.htmlEditor.Cursor = (Cursor)DragCursor["DefaultNot.ico"]; this.htmlEditor.Exec(Interop.IDM.OVERRIDE_CURSOR, true); break; case DragDropCommands.DefaultMove: this.htmlEditor.Cursor = (Cursor)DragCursor["DefaultMove.ico"]; this.htmlEditor.Exec(Interop.IDM.OVERRIDE_CURSOR, true); break; case DragDropCommands.DefaultCopy: this.htmlEditor.Cursor = (Cursor)DragCursor["DefaultCopy.ico"]; this.htmlEditor.Exec(Interop.IDM.OVERRIDE_CURSOR, true); break; default: s = String.Concat(s, DragIcons[element].ToString()); if (DragIcons.ContainsKey(element)) { SetCursorFromRessource(s); } break; } }
/// <summary> /// Checks out if we can convert the dropsource into HTML. /// </summary> /// <param name="dataObject"></param> /// <returns></returns> public virtual DataObjectConverterInfo CanConvertToHtml(DataObject dataObject) { foreach (string format in dataObject.GetFormats()) { if (format.Equals("FileDrop") || format.Equals("System.Drawing.Design.ToolboxItem")) { return(DataObjectConverterInfo.Externally); } if (format.Equals("GuruComponents.Netrix.WebEditing.Elements.IElement")) { GuruComponents.Netrix.WebEditing.Elements.IElement el = dataObject.GetData(format) as GuruComponents.Netrix.WebEditing.Elements.IElement; if (el != null) { return(DataObjectConverterInfo.Native); } } if (format.Equals("GuruComponents.Netrix.WebEditing.DragDrop.DragDropCommands")) { return(DataObjectConverterInfo.CanConvert); } } object data = dataObject.GetData(DataFormats.Serializable); // can be null if internal/external dragdrop operation, so let MSHTML handle it if (data == null) { try { data = dataObject.GetData(DataFormats.Text); if (data != null) { return(DataObjectConverterInfo.Text); } data = dataObject.GetData(DataFormats.Html); if (data != null) { return(DataObjectConverterInfo.Text); } } catch { } } if (data is DragDropCommands) { return(DataObjectConverterInfo.CanConvert); } try { DragDropCommands command = (DragDropCommands)Enum.Parse(typeof(DragDropCommands), data.ToString(), false); return(DataObjectConverterInfo.CanConvert); } catch { } return(DataObjectConverterInfo.Unhandled); }
public static string SaveDragDropCommands() { var commands = new DragDropCommands(); commands.audioDragDropCommand = audioDragDropCommand; commands.gameObjectDragDropCommand = gameObjectDragDropCommand; commands.alternateGameObjectDragDropCommand = alternateGameObjectDragDropCommand; return(JsonUtility.ToJson(commands)); }
/// <summary> /// Determines a dropped data source and build HTML strings that can be inserted into the document. /// </summary> /// <param name="originalDataObject"></param> /// <param name="IsInAbsolutePositionMode"></param> /// <param name="absolutePosition"></param> /// <param name="newDataObject"></param> /// <returns>Returns <c>false</c> if the convertion fails.</returns> public virtual bool ConvertToHtml(DataObject originalDataObject, bool IsInAbsolutePositionMode, System.Drawing.Point absolutePosition, ref DataObject newDataObject) { object data = originalDataObject.GetData(DataFormats.Serializable); string styleAbsPosition = String.Empty; if (IsInAbsolutePositionMode) { // prepare position styleAbsPosition = String.Format(@"style=""position:absolute;left:{0}px;top:{1}px""", absolutePosition.X, absolutePosition.Y); } try { newDataObject = new DataObject(); DragDropCommands dragData = (DragDropCommands)data; switch (dragData) { case DragDropCommands.Anchor: newDataObject.SetData(DataFormats.Html, @"<a " + styleAbsPosition + @" href=""new.html"">New Hyperlink</a>"); break; case DragDropCommands.Break: newDataObject.SetData(DataFormats.Html, @"<br/>"); break; case DragDropCommands.Button: newDataObject.SetData(DataFormats.Html, @"<input type=""button"" value=""Button""/>"); break; case DragDropCommands.Checkbox: newDataObject.SetData(DataFormats.Html, @"<input type=""checkbox"" />"); break; case DragDropCommands.Div: newDataObject.SetData(DataFormats.Html, @"<div " + styleAbsPosition + @">New Division</div>"); break; case DragDropCommands.DropDown: newDataObject.SetData(DataFormats.Html, @"<select size=""1""></select>"); break; case DragDropCommands.FileButton: newDataObject.SetData(DataFormats.Html, @"<input type=""file"" />"); break; case DragDropCommands.Form: newDataObject.SetData(DataFormats.Html, @"<form method=""post""></form>"); break; case DragDropCommands.HorizontalRule: newDataObject.SetData(DataFormats.Html, @"<hr/>"); break; case DragDropCommands.ImageButton: newDataObject.SetData(DataFormats.Html, @"<input type=""image""/>"); break; case DragDropCommands.ListBox: newDataObject.SetData(DataFormats.Html, @"<select size=""3""></select>"); break; case DragDropCommands.Paragraph: newDataObject.SetData(DataFormats.Html, @"<p>New Paragraph</p>"); break; case DragDropCommands.Password: newDataObject.SetData(DataFormats.Html, @"<input type=""password""/>"); break; case DragDropCommands.RadioButton: newDataObject.SetData(DataFormats.Html, @"<input type=""radio"">"); break; case DragDropCommands.ResetButton: newDataObject.SetData(DataFormats.Html, @"<input type=""reset"" value=""Reset"">"); break; case DragDropCommands.HiddenField: newDataObject.SetData(DataFormats.Html, @"<input type=""hidden"" >"); break; case DragDropCommands.SubmitButton: newDataObject.SetData(DataFormats.Html, @"<input type=""submit"" value=""Submit"">"); break; case DragDropCommands.TextArea: newDataObject.SetData(DataFormats.Html, @"<textarea rows=""3"" cols=""40""></textarea>"); break; case DragDropCommands.Textbox: newDataObject.SetData(DataFormats.Html, @"<input type=""text"">"); break; case DragDropCommands.Image: newDataObject.SetData(DataFormats.Html, @"<img/>"); break; case DragDropCommands.Table: newDataObject.SetData(DataFormats.Html, @"<table><tr><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td></tr></table>"); break; case DragDropCommands.Span: newDataObject.SetData(DataFormats.Html, @"<span>New Span</span>"); break; default: // TODO: Access plug-in here return(false); } } catch { return(false); } return(true); }
public int OleDrop(IntPtr pDataObj, int grfKeyState, long pt, ref int pdwEffect) { int result = Interop.S_OK; Control hostControl; Form hostForm; hostControl = this.htmlEditor; while (hostControl != null) { hostControl = hostControl.Parent; hostForm = hostControl as Form; if (hostForm == null) { continue; } hostForm.BringToFront(); break; } int left = (int)(pt & 0xFFFF); int top = (int)(pt >> 32) & 0xFFFF; long pt2; object o = Marshal.GetObjectForIUnknown(pDataObj); _currentDataObj = new DataObject(o); IntPtr cptr; switch (this._dropInfo.ConverterInfo) { case DataObjectConverterInfo.Native: // Create new DataObject if (nativeElement == null) { this._dropInfo.ConverterInfo = DataObjectConverterInfo.Unhandled; goto case DataObjectConverterInfo.Unhandled; } string id = nativeElement.GetAttribute("id") as string; string tempId = Guid.NewGuid().ToString(); nativeElement.SetAttribute("id", tempId); DataObject foolcurrentDataObj = new DataObject(DataFormats.Html, nativeElement.OuterHtml); IntPtr fooldataObjectPtr = Marshal.GetIUnknownForObject(foolcurrentDataObj); Marshal.QueryInterface(fooldataObjectPtr, ref guid, out cptr); Marshal.Release(fooldataObjectPtr); pt2 = (left - 4) + ((long)(top - 16) << 32); result = this._originalDropTarget.OleDrop(cptr, grfKeyState, pt, ref pdwEffect); nativeElement = htmlEditor.GetElementById(tempId); nativeElement.SetAttribute("id", id); break; case DataObjectConverterInfo.CanConvert: object data = _currentDataObj.GetData(DataFormats.Serializable); dragData = (DragDropCommands)data; this._currentDataObj = new DataObject(DataFormats.Html, String.Empty); pDataObj = Marshal.GetIUnknownForObject(this._currentDataObj); Marshal.QueryInterface(dataObjectPtr, ref guid, out cptr); Marshal.Release(dataObjectPtr); pt2 = (left - 4) + ((long)(top - 16) << 32); result = this._originalDropTarget.OleDrop(cptr, grfKeyState, pt2, ref pdwEffect); break; case DataObjectConverterInfo.Text: case DataObjectConverterInfo.Unhandled: result = this._originalDropTarget.OleDrop(pDataObj, grfKeyState, pt, ref pdwEffect); break; case DataObjectConverterInfo.Externally: result = Interop.S_OK; break; } if (nativeElement != null) { SetElementPositioning(nativeElement, left, top); _currentDataObj.SetData(typeof(IElement), nativeElement); } DragEventArgs drgevent = CreateEventArgs(grfKeyState, left, top, (DragDropEffects)pdwEffect, (DragDropEffects)pdwEffect); this.htmlEditor.OnDragDrop(drgevent); pdwEffect = (int)drgevent.AllowedEffect; return(result); }
public int OleDragEnter(IntPtr pDataObj, int grfKeyState, long pt, ref int pdwEffect) { // check for AllowDrop if (this.htmlEditor.AllowDrop == false) { return(Interop.S_FALSE); } int left = (int)(pt & 0xFFFF); int top = (int)(pt >> 32) & 0xFFFF; this.DragPointX = left; this.DragPointY = top; int result = Interop.S_OK; object o = Marshal.GetObjectForIUnknown(pDataObj); _currentDataObj = new DataObject(o); IntPtr cptr; this._dropInfo.ConverterInfo = this._dropInfo.Converter.CanConvertToHtml(_currentDataObj); switch (this._dropInfo.ConverterInfo) { case DataObjectConverterInfo.Native: nativeElement = GetElementFromData(); if (nativeElement == null) { this._dropInfo.ConverterInfo = DataObjectConverterInfo.Unhandled; goto case DataObjectConverterInfo.Unhandled; } // let's drop HTML but keep the serialized element DataObject foolcurrentDataObj = new DataObject(DataFormats.Html, nativeElement.OuterHtml); IntPtr fooldataObjectPtr = Marshal.GetIUnknownForObject(foolcurrentDataObj); Marshal.QueryInterface(fooldataObjectPtr, ref guid, out cptr); Marshal.Release(fooldataObjectPtr); result = this._originalDropTarget.OleDragEnter(cptr, grfKeyState, pt, ref pdwEffect); break; case DataObjectConverterInfo.CanConvert: object data = _currentDataObj.GetData(DataFormats.Serializable); dragData = (DragDropCommands)data; GetMouseCursor(dragData); this._currentDataObj = new DataObject(DataFormats.Html, String.Empty); dataObjectPtr = Marshal.GetIUnknownForObject(this._currentDataObj); Marshal.QueryInterface(dataObjectPtr, ref guid, out cptr); Marshal.Release(dataObjectPtr); result = this._originalDropTarget.OleDragEnter(cptr, grfKeyState, pt, ref pdwEffect); break; case DataObjectConverterInfo.Disabled: result = Interop.S_FALSE; break; case DataObjectConverterInfo.Text: case DataObjectConverterInfo.Unhandled: try { result = this._originalDropTarget.OleDragEnter(pDataObj, grfKeyState, pt, ref pdwEffect); System.Diagnostics.Debug.WriteLine(_currentDataObj.GetData(DataFormats.Html)); } catch { } break; case DataObjectConverterInfo.Externally: result = Interop.S_OK; break; } DragEventArgs drgevent = CreateEventArgs(grfKeyState, left, top, (DragDropEffects)pdwEffect, (DragDropEffects)pdwEffect); this.htmlEditor.OnDragEnter(drgevent); return(result); }