private int SPBasicAcquireSuite(IntPtr name, int version, ref IntPtr suite) { string suiteName = Marshal.PtrToStringAnsi(name); if (suiteName == null) { return(PSError.kSPBadParameterError); } #if DEBUG DebugUtils.Ping(DebugFlags.SPBasicSuite, string.Format("name: {0}, version: {1}", suiteName, version)); #endif int error = PSError.kSPNoError; ActivePICASuites.PICASuiteKey suiteKey = new ActivePICASuites.PICASuiteKey(suiteName, version); if (activePICASuites.IsLoaded(suiteKey)) { suite = activePICASuites.AddRef(suiteKey); } else { error = AllocatePICASuite(suiteKey, ref suite); } return(error); }
private int SPBasicReleaseSuite(IntPtr name, int version) { string suiteName = Marshal.PtrToStringAnsi(name); #if DEBUG DebugUtils.Ping(DebugFlags.SPBasicSuite, string.Format("name: {0}, version: {1}", suiteName, version.ToString())); #endif ActivePICASuites.PICASuiteKey suiteKey = new ActivePICASuites.PICASuiteKey(suiteName, version); activePICASuites.Release(suiteKey); return(PSError.kSPNoError); }
private int AllocatePICASuite(ActivePICASuites.PICASuiteKey suiteKey, ref IntPtr suitePointer) { try { string suiteName = suiteKey.Name; int version = suiteKey.Version; if (suiteName.Equals(PSConstants.PICA.BufferSuite, StringComparison.Ordinal)) { if (version != 1) { return(PSError.kSPSuiteNotFoundError); } if (bufferSuite == null) { bufferSuite = new PICABufferSuite(); } PSBufferSuite1 suite = bufferSuite.CreateBufferSuite1(); suitePointer = activePICASuites.AllocateSuite(suiteKey, suite); } else if (suiteName.Equals(PSConstants.PICA.HandleSuite, StringComparison.Ordinal)) { if (version != 1 && version != 2) { return(PSError.kSPSuiteNotFoundError); } if (handleSuite == null) { handleSuite = new PICAHandleSuite(); } if (version == 1) { PSHandleSuite1 suite = handleSuite.CreateHandleSuite1(); suitePointer = activePICASuites.AllocateSuite(suiteKey, suite); } else if (version == 2) { PSHandleSuite2 suite = handleSuite.CreateHandleSuite2(); suitePointer = activePICASuites.AllocateSuite(suiteKey, suite); } } else if (suiteName.Equals(PSConstants.PICA.PropertySuite, StringComparison.Ordinal)) { // The property suite can be null when the filter is showing its about box. if (propertySuite == null || version != PSConstants.kCurrentPropertyProcsVersion) { return(PSError.kSPSuiteNotFoundError); } PropertyProcs suite = propertySuite.CreatePropertySuite(); suitePointer = activePICASuites.AllocateSuite(suiteKey, suite); } else if (suiteName.Equals(PSConstants.PICA.UIHooksSuite, StringComparison.Ordinal)) { if (version != 1) { return(PSError.kSPSuiteNotFoundError); } if (uiHooksSuite == null) { uiHooksSuite = new PICAUIHooksSuite(picaSuiteData.ParentWindowHandle, pluginName, ASZStringSuite); } PSUIHooksSuite1 suite = uiHooksSuite.CreateUIHooksSuite1(picaSuiteData); suitePointer = activePICASuites.AllocateSuite(suiteKey, suite); } else if (suiteName.Equals(PSConstants.PICA.ActionDescriptorSuite, StringComparison.Ordinal)) { if (version != 2) { return(PSError.kSPSuiteNotFoundError); } if (!actionSuites.DescriptorSuiteCreated) { CreateActionDescriptorSuite(); } PSActionDescriptorProc actionDescriptor = actionSuites.DescriptorSuite.CreateActionDescriptorSuite2(); suitePointer = activePICASuites.AllocateSuite(suiteKey, actionDescriptor); } else if (suiteName.Equals(PSConstants.PICA.ActionListSuite, StringComparison.Ordinal)) { if (version != 1) { return(PSError.kSPSuiteNotFoundError); } if (!actionSuites.ListSuiteCreated) { actionSuites.CreateListSuite(ASZStringSuite); } PSActionListProcs listSuite = actionSuites.ListSuite.CreateActionListSuite1(); suitePointer = activePICASuites.AllocateSuite(suiteKey, listSuite); } else if (suiteName.Equals(PSConstants.PICA.ActionReferenceSuite, StringComparison.Ordinal)) { if (version != 2) { return(PSError.kSPSuiteNotFoundError); } if (!actionSuites.ReferenceSuiteCreated) { actionSuites.CreateReferenceSuite(); } PSActionReferenceProcs referenceSuite = actionSuites.ReferenceSuite.CreateActionReferenceSuite2(); suitePointer = activePICASuites.AllocateSuite(suiteKey, referenceSuite); } else if (suiteName.Equals(PSConstants.PICA.ASZStringSuite, StringComparison.Ordinal)) { if (version != 1) { return(PSError.kSPSuiteNotFoundError); } ASZStringSuite1 stringSuite = ASZStringSuite.CreateASZStringSuite1(); suitePointer = activePICASuites.AllocateSuite(suiteKey, stringSuite); } else if (suiteName.Equals(PSConstants.PICA.ColorSpaceSuite, StringComparison.Ordinal)) { // The color picker can be null when the filter is showing its about box. if (colorPicker == null || version != 1) { return(PSError.kSPSuiteNotFoundError); } if (colorSpaceSuite == null) { colorSpaceSuite = new PICAColorSpaceSuite(ASZStringSuite, colorPicker); } PSColorSpaceSuite1 csSuite = colorSpaceSuite.CreateColorSpaceSuite1(); suitePointer = activePICASuites.AllocateSuite(suiteKey, csSuite); } else if (suiteName.Equals(PSConstants.PICA.DescriptorRegistrySuite, StringComparison.Ordinal)) { if (version != 1) { return(PSError.kSPSuiteNotFoundError); } if (descriptorRegistrySuite == null) { if (!actionSuites.DescriptorSuiteCreated) { CreateActionDescriptorSuite(); } descriptorRegistrySuite = new DescriptorRegistrySuite(actionSuites.DescriptorSuite); if (pluginSettings != null) { descriptorRegistrySuite.SetPluginSettings(pluginSettings); } } PSDescriptorRegistryProcs registrySuite = descriptorRegistrySuite.CreateDescriptorRegistrySuite1(); suitePointer = activePICASuites.AllocateSuite(suiteKey, registrySuite); } else if (suiteName.Equals(PSConstants.PICA.ErrorSuite, StringComparison.Ordinal)) { if (version != 1) { return(PSError.kSPSuiteNotFoundError); } if (errorSuite == null) { errorSuite = new ErrorSuite(ASZStringSuite); } PSErrorSuite1 errorProcs = errorSuite.CreateErrorSuite1(); suitePointer = activePICASuites.AllocateSuite(suiteKey, errorProcs); } #if PICASUITEDEBUG else if (suiteName.Equals(PSConstants.PICA.SPPluginsSuite, StringComparison.Ordinal)) { if (version != 4) { return(PSError.kSPSuiteNotFoundError); } SPPluginsSuite4 plugs = PICASPPluginsSuite.CreateSPPluginsSuite4(); suitePointer = this.activePICASuites.AllocateSuite(suiteKey, plugs); } #endif else { return(PSError.kSPSuiteNotFoundError); } } catch (OutOfMemoryException) { return(PSError.memFullErr); } return(PSError.kSPNoError); }