static void FillDataStore(TransferDataStore store, IDataObject data) { store.DataRequestCallback = tdt => { var di = tdt.ToWpfDataFormat(); if (data.GetDataPresent(di)) { return(data.GetData(di)); } return(null); }; foreach (var item in data.GetFormats()) { var format = item.ToXwtTransferType(); if (format == TransferDataType.Text) { store.AddText((string)data.GetData(item)); } else if (format == TransferDataType.Uri) { var value = data.GetData(item); var uris = ((string[])value).Select(f => new Uri(f)).ToArray(); store.AddUris(uris); } else { store.AddValue(format, (object)null); } } }
static bool PerformDragOperation(IntPtr sender, IntPtr sel, IntPtr dragInfo) { IViewObject <T> ob = Runtime.GetNSObject(sender) as IViewObject <T>; if (ob == null) { return(false); } var backend = (ViewBackend <T, S>)WidgetRegistry.GetBackend(ob.Frontend); NSDraggingInfo di = new NSDraggingInfo(dragInfo); var pos = new Point(di.DraggingLocation.X, di.DraggingLocation.Y); if ((backend.currentEvents & WidgetEvent.DragDrop) != 0) { TransferDataStore store = new TransferDataStore(); FillDataStore(store, di.DraggingPasteboard, ob.View.RegisteredDragTypes()); var args = new DragEventArgs(pos, store, ConvertAction(di.DraggingSourceOperationMask)); Toolkit.Invoke(delegate { backend.eventSink.OnDragDrop(args); }); return(args.Success); } else { return(false); } }
public static bool GetSelectionData(Gtk.SelectionData data, TransferDataStore target) { TransferDataType type = Util.AtomToType(data.Target.Name); if (type == null || data.Length <= 0) { return(false); } if (type == TransferDataType.Text) { target.AddText(data.Text); } else if (data.TargetsIncludeImage(false)) { target.AddImage(WidgetRegistry.CreateFrontend <Xwt.Drawing.Image> (data.Pixbuf)); } else if (type == TransferDataType.Uri) { var uris = System.Text.Encoding.UTF8.GetString(data.Data).Split('\n').Where(u => !string.IsNullOrEmpty(u)).Select(u => new Uri(u)).ToArray(); target.AddUris(uris); } else { target.AddValue(type, data.Data); } return(true); }
void QueryDragData(Gdk.DragContext ctx, uint time, bool isMotionEvent) { dragDataForMotion = isMotionEvent; dragData = new TransferDataStore(); dragDataRequests = validDropTypes.Length; foreach (var t in validDropTypes) { var at = Gdk.Atom.Intern(t.Target, true); Gtk.Drag.GetData(Widget, ctx, at, time); } }
static NSDragOperation DraggingUpdated(IntPtr sender, IntPtr sel, IntPtr dragInfo) { IViewObject <T> ob = Runtime.GetNSObject(sender) as IViewObject <T>; if (ob == null) { return(NSDragOperation.None); } var backend = (ViewBackend <T, S>)WidgetRegistry.GetBackend(ob.Frontend); NSDraggingInfo di = new NSDraggingInfo(dragInfo); var types = di.DraggingPasteboard.Types.Select(t => ToXwtDragType(t)).ToArray(); var pos = new Point(di.DraggingLocation.X, di.DraggingLocation.Y); if ((backend.currentEvents & WidgetEvent.DragOverCheck) != 0) { var args = new DragOverCheckEventArgs(pos, types, ConvertAction(di.DraggingSourceOperationMask)); Toolkit.Invoke(delegate { backend.eventSink.OnDragOverCheck(args); }); if (args.AllowedAction == DragDropAction.None) { return(NSDragOperation.None); } if (args.AllowedAction != DragDropAction.Default) { return(ConvertAction(args.AllowedAction)); } } if ((backend.currentEvents & WidgetEvent.DragOver) != 0) { TransferDataStore store = new TransferDataStore(); FillDataStore(store, di.DraggingPasteboard, ob.View.RegisteredDragTypes()); var args = new DragOverEventArgs(pos, store, ConvertAction(di.DraggingSourceOperationMask)); Toolkit.Invoke(delegate { backend.eventSink.OnDragOver(args); }); if (args.AllowedAction == DragDropAction.None) { return(NSDragOperation.None); } if (args.AllowedAction != DragDropAction.Default) { return(ConvertAction(args.AllowedAction)); } } return(di.DraggingSourceOperationMask); }
void WidgetDropHandler(object sender, System.Windows.DragEventArgs e) { // Do a DragOverCheck before proceeding to the drop. This is required since in some cases the DragOver // handler may not be called. CheckDrop(sender, e); if (e.Effects == DragDropEffects.None) { return; } WidgetDragLeaveHandler(sender, e); var types = e.Data.GetFormats().Select(DataConverter.ToXwtTransferType).ToArray(); var pos = e.GetPosition(Widget).ToXwtPoint(); var actualEffect = currentDragEffect; e.Handled = true; // Prevent default handlers from being used. e.Effects = DragDropEffects.None; if ((enabledEvents & WidgetEvent.DragDropCheck) > 0) { var checkArgs = new DragCheckEventArgs(pos, types, actualEffect.ToXwtDropAction()); bool res = Context.InvokeUserCode(delegate { eventSink.OnDragDropCheck(checkArgs); }); if (checkArgs.Result == DragDropResult.Canceled || !res) { e.Effects = DragDropEffects.None; return; } } if ((enabledEvents & WidgetEvent.DragDrop) > 0) { var store = new TransferDataStore(); FillDataStore(store, e.Data); //, DragDropInfo.TargetTypes); var args = new DragEventArgs(pos, store, actualEffect.ToXwtDropAction()); Context.InvokeUserCode(delegate { eventSink.OnDragDrop(args); }); if (args.Success) { e.Effects = actualEffect; } } }
public object GetData(TransferDataType type) { if (type == TransferDataType.Text) return clipboard.WaitForText (); if (type == TransferDataType.Text) return clipboard.WaitForImage (); TransferDataStore store = new TransferDataStore (); foreach (var at in GetAtomsForType (type)) { var data = clipboard.WaitForContents (at); Util.GetSelectionData (data, store); } return ((ITransferData)store).GetValue (type); }
void CheckDrop(object sender, System.Windows.DragEventArgs e) { var types = e.Data.GetFormats().Select(DataConverter.ToXwtTransferType).ToArray(); var pos = e.GetPosition(Widget).ToXwtPoint(); var proposedAction = DetectDragAction(e.KeyStates); e.Handled = true; // Prevent default handlers from being used. if ((enabledEvents & WidgetEvent.DragOverCheck) > 0) { var checkArgs = new DragOverCheckEventArgs(pos, types, proposedAction); Context.InvokeUserCode(delegate { eventSink.OnDragOverCheck(checkArgs); }); if (checkArgs.AllowedAction == DragDropAction.None) { e.Effects = currentDragEffect = DragDropEffects.None; return; } if (checkArgs.AllowedAction != DragDropAction.Default) { e.Effects = currentDragEffect = checkArgs.AllowedAction.ToWpfDropEffect(); return; } } if ((enabledEvents & WidgetEvent.DragOver) > 0) { var store = new TransferDataStore(); FillDataStore(store, e.Data); //, DragDropInfo.TargetTypes); var args = new DragOverEventArgs(pos, store, proposedAction); OnDragOver(sender, args); if (args.AllowedAction == DragDropAction.None) { e.Effects = currentDragEffect = DragDropEffects.None; return; } if (args.AllowedAction != DragDropAction.Default) { e.Effects = currentDragEffect = args.AllowedAction.ToWpfDropEffect(); return; } } e.Effects = currentDragEffect = proposedAction.ToWpfDropEffect(); }
public static bool GetSelectionData(Gtk.SelectionData data, TransferDataStore target) { TransferDataType type = Util.AtomToType (data.Target.Name); if (type == null || data.Length <= 0) return false; if (type == TransferDataType.Text) target.AddText (data.Text); else if (data.TargetsIncludeImage (false)) target.AddImage (WidgetRegistry.CreateFrontend<Xwt.Drawing.Image> (data.Pixbuf)); else if (type == TransferDataType.Uri) { var uris = System.Text.Encoding.UTF8.GetString (data.Data).Split ('\n').Where (u => !string.IsNullOrEmpty(u)).Select (u => new Uri (u)).ToArray (); target.AddUris (uris); } else target.AddValue (type, data.Data); return true; }
public override object GetData(TransferDataType type) { if (type == TransferDataType.Text) { return(clipboard.WaitForText()); } if (type == TransferDataType.Image) { return(ApplicationContext.Toolkit.WrapImage(new GtkImage(clipboard.WaitForImage()))); } TransferDataStore store = new TransferDataStore(); foreach (var at in GetAtomsForType(type)) { var data = clipboard.WaitForContents(at); Util.GetSelectionData(ApplicationContext, data, store); } return(((ITransferData)store).GetValue(type)); }
public object GetData(TransferDataType type) { if (type == TransferDataType.Text) { return(clipboard.WaitForText()); } if (type == TransferDataType.Text) { return(clipboard.WaitForImage()); } TransferDataStore store = new TransferDataStore(); foreach (var at in GetAtomsForType(type)) { var data = clipboard.WaitForContents(at); Util.GetSelectionData(data, store); } return(((ITransferData)store).GetValue(type)); }
void WidgetDropHandler(object sender, System.Windows.DragEventArgs e) { WidgetDragLeaveHandler(sender, e); var types = e.Data.GetFormats().Select(t => t.ToXwtTransferType()).ToArray(); var pos = e.GetPosition(Widget).ToXwtPoint(); var actualEffect = currentDragEffect; e.Handled = true; // Prevent default handlers from being used. e.Effects = DragDropEffects.None; if ((enabledEvents & WidgetEvent.DragDropCheck) > 0) { var checkArgs = new DragCheckEventArgs(pos, types, actualEffect.ToXwtDropAction()); bool res = Context.InvokeUserCode(delegate { eventSink.OnDragDropCheck(checkArgs); }); if (checkArgs.Result == DragDropResult.Canceled || !res) { e.Effects = DragDropEffects.None; return; } } if ((enabledEvents & WidgetEvent.DragDrop) > 0) { var store = new TransferDataStore(); FillDataStore(store, e.Data, DragDropInfo.TargetTypes); var args = new DragEventArgs(pos, store, actualEffect.ToXwtDropAction()); Context.InvokeUserCode(delegate { eventSink.OnDragDrop(args); }); if (args.Success) { e.Effects = actualEffect; } } }
void DataReceived(Gtk.Clipboard cb, Gtk.SelectionData data) { TransferDataStore store = new TransferDataStore(); if (Util.GetSelectionData(data, store)) { Result = ((ITransferData)store).GetValue(type); SetComplete(); } else { if (++index < atoms.Length) { RequestData(); } else { SetComplete(); } } }
static void FillDataStore(TransferDataStore store, NSPasteboard pb, string[] types) { foreach (var t in types) { if (!pb.Types.Contains(t)) { continue; } if (t == NSPasteboard.NSStringType) { store.AddText(pb.GetStringForType(t)); } else if (t == NSPasteboard.NSFilenamesType) { string data = pb.GetStringForType(t); XmlDocument doc = new XmlDocument(); doc.XmlResolver = null; // Avoid DTD validation doc.LoadXml(data); store.AddUris(doc.SelectNodes("/plist/array/string").Cast <XmlElement> ().Select(e => new Uri(e.InnerText)).ToArray()); } } }
static void FillDataStore(TransferDataStore store, IDataObject data, TransferDataType [] types) { foreach (var type in types) { string format = type.ToWpfDataFormat(); if (!data.GetDataPresent(format)) { // This is a workaround to support type names which don't include the assembly name. // It eases integration with Windows DND. format = NormalizeTypeName(format); if (!data.GetDataPresent(format)) { continue; } } var value = data.GetData(format); if (type == TransferDataType.Text) { store.AddText((string)value); } else if (type == TransferDataType.Uri) { var uris = ((string [])value).Select(f => new Uri(f)).ToArray(); store.AddUris(uris); } else if (value is byte[]) { store.AddValue(type, (byte[])value); } else { store.AddValue(type, value); } } }
static void FillDataStore(TransferDataStore store, IDataObject data, TransferDataType [] types) { foreach (var type in types) { string format = type.ToWpfDataFormat (); if (!data.GetDataPresent (format)) { // This is a workaround to support type names which don't include the assembly name. // It eases integration with Windows DND. format = NormalizeTypeName (format); if (!data.GetDataPresent (format)) continue; } var value = data.GetData (format); if (type == TransferDataType.Text) store.AddText ((string)value); else if (type == TransferDataType.Uri) { var uris = ((string [])value).Select (f => new Uri (f)).ToArray (); store.AddUris (uris); } else if (value is byte[]) store.AddValue (type, (byte[]) value); else store.AddValue (type, value); } }
void WidgetDragOverHandler(object sender, System.Windows.DragEventArgs e) { var types = e.Data.GetFormats().Select(t => t.ToXwtTransferType()).ToArray(); var pos = e.GetPosition(Widget).ToXwtPoint(); var proposedAction = DetectDragAction(e.KeyStates); e.Handled = true; // Prevent default handlers from being used. if (Adorner != null) { var w = GetParentWindow(); var v = (UIElement)w.Content; if (w != AdornedWindow) { AdornedLayer.Remove(Adorner); AdornedWindow.AllowDrop = false; AdornedWindow.DragOver -= AdornedWindowOnDragOver; AdornedWindow = w; AdornedWindow.AllowDrop = true; AdornedWindow.DragOver += AdornedWindowOnDragOver; AdornedLayer = AdornerLayer.GetAdornerLayer(v); AdornedLayer.Add(Adorner); } Adorner.Offset = e.GetPosition(v); } if ((enabledEvents & WidgetEvent.DragOverCheck) > 0) { var checkArgs = new DragOverCheckEventArgs(pos, types, proposedAction); Context.InvokeUserCode(delegate { eventSink.OnDragOverCheck(checkArgs); }); if (checkArgs.AllowedAction == DragDropAction.None) { e.Effects = currentDragEffect = DragDropEffects.None; return; } if (checkArgs.AllowedAction != DragDropAction.Default) { e.Effects = currentDragEffect = checkArgs.AllowedAction.ToWpfDropEffect(); return; } } if ((enabledEvents & WidgetEvent.DragOver) > 0) { var store = new TransferDataStore(); FillDataStore(store, e.Data, DragDropInfo.TargetTypes); var args = new DragOverEventArgs(pos, store, proposedAction); OnDragOver(sender, args); if (args.AllowedAction == DragDropAction.None) { e.Effects = currentDragEffect = DragDropEffects.None; return; } if (args.AllowedAction != DragDropAction.Default) { e.Effects = currentDragEffect = args.AllowedAction.ToWpfDropEffect(); return; } } e.Effects = currentDragEffect = proposedAction.ToWpfDropEffect(); }
public static bool GetSelectionData(ApplicationContext context, Gtk.SelectionData data, TransferDataStore target) { TransferDataType type = Util.AtomToType (data.Target.Name); if (type == null || data.Length <= 0) return false; if (type == TransferDataType.Text) target.AddText (data.Text); else if (data.TargetsIncludeImage (false)) target.AddImage (context.Toolkit.WrapImage (data.Pixbuf)); else if (type == TransferDataType.Uri) target.AddUris (data.GetUris().Where(u => !string.IsNullOrEmpty(u)).Select(u => new Uri(u)).ToArray()); else target.AddValue (type, data.Data); return true; }
void QueryDragData(Gdk.DragContext ctx, uint time, bool isMotionEvent) { dragDataForMotion = isMotionEvent; dragData = new TransferDataStore (); dragDataRequests = validDropTypes.Length; foreach (var t in validDropTypes) { var at = Gdk.Atom.Intern (t.Target, true); Gtk.Drag.GetData (Widget, ctx, at, time); } }
void CheckDrop(object sender, System.Windows.DragEventArgs e) { var types = e.Data.GetFormats ().Select (t => t.ToXwtTransferType ()).ToArray (); var pos = e.GetPosition (Widget).ToXwtPoint (); var proposedAction = DetectDragAction (e.KeyStates); e.Handled = true; // Prevent default handlers from being used. if ((enabledEvents & WidgetEvent.DragOverCheck) > 0) { var checkArgs = new DragOverCheckEventArgs (pos, types, proposedAction); Context.InvokeUserCode (delegate { eventSink.OnDragOverCheck (checkArgs); }); if (checkArgs.AllowedAction == DragDropAction.None) { e.Effects = currentDragEffect = DragDropEffects.None; return; } if (checkArgs.AllowedAction != DragDropAction.Default) { e.Effects = currentDragEffect = checkArgs.AllowedAction.ToWpfDropEffect (); return; } } if ((enabledEvents & WidgetEvent.DragOver) > 0) { var store = new TransferDataStore (); FillDataStore (store, e.Data, DragDropInfo.TargetTypes); var args = new DragOverEventArgs (pos, store, proposedAction); OnDragOver (sender, args); if (args.AllowedAction == DragDropAction.None) { e.Effects = currentDragEffect = DragDropEffects.None; return; } if (args.AllowedAction != DragDropAction.Default) { e.Effects = currentDragEffect = args.AllowedAction.ToWpfDropEffect (); return; } } e.Effects = currentDragEffect = proposedAction.ToWpfDropEffect (); }
public DragEventArgs(Point position, TransferDataStore dataStore, DragDropAction action) { Data = dataStore; Position = position; Action = action; Success = false; }
public override object GetData (TransferDataType type) { if (type == TransferDataType.Text) return clipboard.WaitForText (); if (type == TransferDataType.Image) return ApplicationContext.Toolkit.WrapImage (new GtkImage (clipboard.WaitForImage())); TransferDataStore store = new TransferDataStore (); foreach (var at in GetAtomsForType (type)) { var data = clipboard.WaitForContents (at); Util.GetSelectionData (ApplicationContext, data, store); } return ((ITransferData)store).GetValue (type); }
void WidgetDragOverHandler(object sender, System.Windows.DragEventArgs e) { var types = e.Data.GetFormats ().Select (t => t.ToXwtTransferType ()).ToArray (); var pos = e.GetPosition (Widget).ToXwtPoint (); var proposedAction = DetectDragAction (e.KeyStates); e.Handled = true; // Prevent default handlers from being used. if (Adorner != null) { var w = GetParentWindow (); var v = (UIElement)w.Content; if (w != AdornedWindow) { AdornedLayer.Remove (Adorner); AdornedWindow.AllowDrop = false; AdornedWindow.DragOver -= AdornedWindowOnDragOver; AdornedWindow = w; AdornedWindow.AllowDrop = true; AdornedWindow.DragOver += AdornedWindowOnDragOver; AdornedLayer = AdornerLayer.GetAdornerLayer (v); AdornedLayer.Add (Adorner); } Adorner.Offset = e.GetPosition (v); } if ((enabledEvents & WidgetEvent.DragOverCheck) > 0) { var checkArgs = new DragOverCheckEventArgs (pos, types, proposedAction); Context.InvokeUserCode (delegate { eventSink.OnDragOverCheck (checkArgs); }); if (checkArgs.AllowedAction == DragDropAction.None) { e.Effects = currentDragEffect = DragDropEffects.None; return; } if (checkArgs.AllowedAction != DragDropAction.Default) { e.Effects = currentDragEffect = checkArgs.AllowedAction.ToWpfDropEffect (); return; } } if ((enabledEvents & WidgetEvent.DragOver) > 0) { var store = new TransferDataStore (); FillDataStore (store, e.Data, DragDropInfo.TargetTypes); var args = new DragOverEventArgs (pos, store, proposedAction); OnDragOver (sender, args); if (args.AllowedAction == DragDropAction.None) { e.Effects = currentDragEffect = DragDropEffects.None; return; } if (args.AllowedAction != DragDropAction.Default) { e.Effects = currentDragEffect = args.AllowedAction.ToWpfDropEffect (); return; } } e.Effects = currentDragEffect = proposedAction.ToWpfDropEffect (); }
public static bool GetSelectionData(ApplicationContext context, Gtk.SelectionData data, TransferDataStore target) { TransferDataType type = Util.AtomToType(data.Target.Name); if (type == null || data.Length <= 0) { return(false); } if (type == TransferDataType.Text) { target.AddText(data.Text); } else if (data.TargetsIncludeImage(false)) { target.AddImage(context.Toolkit.WrapImage(data.Pixbuf)); } else if (type == TransferDataType.Uri) { target.AddUris(data.GetUris().Where(u => !string.IsNullOrEmpty(u)).Select(u => new Uri(u)).ToArray()); } else { target.AddValue(type, data.Data); } return(true); }
static void FillDataStore(TransferDataStore store, IDataObject data, TransferDataType [] types) { foreach (var type in types) { string format = type.ToWpfDataFormat (); if (!data.GetDataPresent (format)) continue; var value = data.GetData (format); if (type == TransferDataType.Text) store.AddText ((string)value); else if (type == TransferDataType.Uri) { var uris = ((string [])value).Select (f => new Uri (f)).ToArray (); store.AddUris (uris); } else if (value is byte[]) store.AddValue (type, (byte[]) value); else store.AddValue (type, value); } }
void WidgetDropHandler(object sender, System.Windows.DragEventArgs e) { WidgetDragLeaveHandler (sender, e); var types = e.Data.GetFormats ().Select (t => t.ToXwtTransferType ()).ToArray (); var pos = e.GetPosition (Widget).ToXwtPoint (); var actualEffect = currentDragEffect; e.Handled = true; // Prevent default handlers from being used. e.Effects = DragDropEffects.None; if ((enabledEvents & WidgetEvent.DragDropCheck) > 0) { var checkArgs = new DragCheckEventArgs (pos, types, actualEffect.ToXwtDropAction ()); bool res = Context.InvokeUserCode (delegate { eventSink.OnDragDropCheck (checkArgs); }); if (checkArgs.Result == DragDropResult.Canceled || !res) { e.Effects = DragDropEffects.None; return; } } if ((enabledEvents & WidgetEvent.DragDrop) > 0) { var store = new TransferDataStore (); FillDataStore (store, e.Data, DragDropInfo.TargetTypes); var args = new DragEventArgs (pos, store, actualEffect.ToXwtDropAction ()); Context.InvokeUserCode (delegate { eventSink.OnDragDrop (args); }); if (args.Success) e.Effects = actualEffect; } }
void DataReceived (Gtk.Clipboard cb, Gtk.SelectionData data) { TransferDataStore store = new TransferDataStore (); if (Util.GetSelectionData (context, data, store)) { Result = ((ITransferData)store).GetValue (type); SetComplete (); } else { if (++index < atoms.Length) RequestData (); else SetComplete (); } }