/// <summary>
        /// Sets the plug-in settings for the current session.
        /// </summary>
        /// <param name="values">The plug-in settings.</param>
        /// <exception cref="ArgumentNullException"><paramref name="values"/> is null.</exception>
        public void SetRegistryValues(DescriptorRegistryValues values)
        {
            if (values == null)
            {
                throw new ArgumentNullException(nameof(values));
            }

            ReadOnlyDictionary <string, DescriptorRegistryItem> persistedValues = values.PersistedValues;
            ReadOnlyDictionary <string, DescriptorRegistryItem> sessionValues   = values.SessionValues;

            if (persistedValues != null)
            {
                foreach (KeyValuePair <string, DescriptorRegistryItem> item in persistedValues)
                {
                    registry.Add(item.Key, item.Value);
                }
            }

            if (sessionValues != null)
            {
                foreach (KeyValuePair <string, DescriptorRegistryItem> item in sessionValues)
                {
                    registry.Add(item.Key, item.Value);
                }
            }
        }
Beispiel #2
0
 public PSFilterPdnConfigToken(Surface dest, PluginData filterData, bool useShim, Dictionary <PluginData, ParameterData> paramData,
                               PseudoResourceCollection resources, DescriptorRegistryValues registryValues, ConfigDialogState configDialog)
     : base()
 {
     Dest               = dest;
     FilterData         = filterData;
     RunWith32BitShim   = useShim;
     FilterParameters   = paramData;
     PseudoResources    = resources;
     DescriptorRegistry = registryValues;
     DialogState        = configDialog;
 }
Beispiel #3
0
        static void RunFilter()
        {
            PluginData           pdata    = pipeClient.GetPluginData();
            PSFilterShimSettings settings = pipeClient.GetShimSettings();

            Region selectionRegion = null;

            if (!string.IsNullOrEmpty(settings.RegionDataPath))
            {
                RegionDataWrapper wrapper = DataContractSerializerUtil.Deserialize <RegionDataWrapper>(settings.RegionDataPath);

                using (Region temp = new Region())
                {
                    RegionData rgnData = temp.GetRegionData();
                    rgnData.Data = wrapper.GetData();

                    selectionRegion = new Region(rgnData);
                }
            }
            try
            {
                ParameterData filterParameters = null;
                try
                {
                    filterParameters = DataContractSerializerUtil.Deserialize <ParameterData>(settings.ParameterDataPath);
                }
                catch (FileNotFoundException)
                {
                }

                PseudoResourceCollection pseudoResources = null;
                try
                {
                    pseudoResources = DataContractSerializerUtil.Deserialize <PseudoResourceCollection>(settings.PseudoResourcePath);
                }
                catch (FileNotFoundException)
                {
                }

                DescriptorRegistryValues registryValues = null;
                try
                {
                    registryValues = DataContractSerializerUtil.Deserialize <DescriptorRegistryValues>(settings.DescriptorRegistryPath);
                }
                catch (FileNotFoundException)
                {
                }

                using (LoadPsFilter lps = new LoadPsFilter(settings, selectionRegion))
                {
                    lps.SetAbortCallback(pipeClient.AbortFilter);

                    if (!settings.RepeatEffect)
                    {
                        // As Paint.NET does not currently allow custom progress reporting only set this callback for the effect dialog.
                        lps.SetProgressCallback(pipeClient.UpdateFilterProgress);
                    }

                    if (filterParameters != null)
                    {
                        // Ignore the filters that only use the data handle, e.g. Filter Factory.
                        byte[] parameterData = filterParameters.GlobalParameters.GetParameterDataBytes();

                        if (parameterData != null || filterParameters.AETEDictionary != null)
                        {
                            lps.FilterParameters = filterParameters;
                            lps.IsRepeatEffect   = settings.RepeatEffect;
                        }
                    }

                    if (pseudoResources != null)
                    {
                        lps.PseudoResources = pseudoResources;
                    }

                    if (registryValues != null)
                    {
                        lps.SetRegistryValues(registryValues);
                    }

                    bool result = lps.RunPlugin(pdata, settings.ShowAboutDialog);

                    if (result)
                    {
                        if (!settings.ShowAboutDialog)
                        {
                            PSFilterShimImage.Save(settings.DestinationImagePath, lps.Dest);

                            if (!lps.IsRepeatEffect)
                            {
                                DataContractSerializerUtil.Serialize(settings.ParameterDataPath, lps.FilterParameters);
                                DataContractSerializerUtil.Serialize(settings.PseudoResourcePath, lps.PseudoResources);

                                registryValues = lps.GetRegistryValues();
                                if (registryValues != null)
                                {
                                    DataContractSerializerUtil.Serialize(settings.DescriptorRegistryPath, registryValues);
                                }
                            }
                        }
                    }
                    else
                    {
                        pipeClient.SetProxyErrorMessage(lps.ErrorMessage);
                    }
                }
            }
            catch (BadImageFormatException ex)
            {
                pipeClient.SetProxyErrorMessage(ex.Message);
            }
            catch (EntryPointNotFoundException epnf)
            {
                pipeClient.SetProxyErrorMessage(epnf.Message);
            }
            catch (FileNotFoundException fx)
            {
                pipeClient.SetProxyErrorMessage(fx.Message);
            }
            catch (NullReferenceException ex)
            {
#if DEBUG
                pipeClient.SetProxyErrorMessage(ex.Message + Environment.NewLine + ex.StackTrace);
#else
                pipeClient.SetProxyErrorMessage(ex.Message);
#endif
            }
            catch (Win32Exception ex)
            {
                pipeClient.SetProxyErrorMessage(ex.Message);
            }
            finally
            {
                if (selectionRegion != null)
                {
                    selectionRegion.Dispose();
                    selectionRegion = null;
                }
            }
        }