private void ClipboardHook_DataCopied(object sender, Events.DataCopiedEventArgument e) { var dataObject = e.Data; var package = new ClipboardDataControlPackage(); foreach (var factory in dataFactories) { foreach (var format in dataObject.GetFormats(true)) { if (factory.CanBuildData(format)) { var rawData = dataObject.GetData(format); var clipboardData = factory.BuildData(format, rawData); package.AddData(clipboardData); } } } //construct a control if the package contains any data. foreach (var factory in dataFactories) { foreach (var data in package.Contents) { if (factory.CanBuildControl(data)) { package.Control = factory.BuildControl(data); break; } } } if(package.Control == null) { throw new NotImplementedException("Can't handle unknown data formats yet."); } //signal an added event. if(ControlAdded != null) { ControlAdded(this, new ControlEventArgument(package.Control)); } }
void DecoratePackageWithFormatDataUsingFactory( ClipboardDataControlPackage package, IClipboardDataControlFactory factory, uint format) { var unwrapper = memoryUnwrappers.FirstOrDefault(x => x.CanUnwrap(format)); if (unwrapper != null) { var rawData = unwrapper.UnwrapStructure(format); if (rawData != null) { var clipboardData = factory.BuildData(format, rawData); if (clipboardData != null) { package.AddData(clipboardData); } } } }