/* ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ JUCE can be redistributed and/or modified under the terms of the GNU General Public License (Version 2), as published by the Free Software Foundation. A copy of the license is included in the JUCE distribution, or can be found online at www.gnu.org/licenses. JUCE is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ------------------------------------------------------------------------------ To release a closed-source product which uses JUCE, commercial licenses are available: visit www.rawmaterialsoftware.com/juce for more information. ============================================================================== */ #ifndef __JUCE_PLUGINDESCRIPTION_JUCEHEADER__ #define __JUCE_PLUGINDESCRIPTION_JUCEHEADER__ //============================================================================== /** A small class to represent some facts about a particular type of plugin. This class is for storing and managing the details about a plugin without actually having to load an instance of it. A KnownPluginList contains a list of PluginDescription objects. @see KnownPluginList */ class JUCE_API PluginDescription { public: //============================================================================== PluginDescription(); PluginDescription (const PluginDescription& other); PluginDescription& operator= (const PluginDescription& other); ~PluginDescription(); //============================================================================== /** The name of the plugin. */ String name; /** A more descriptive name for the plugin. This may be the same as the 'name' field, but some plugins may provide an alternative name. */ String descriptiveName; /** The plugin format, e.g. "VST", "AudioUnit", etc. */ String pluginFormatName; /** A category, such as "Dynamics", "Reverbs", etc. */ String category; /** The manufacturer. */ String manufacturerName; /** The version. This string doesn't have any particular format. */ String version; /** Either the file containing the plugin module, or some other unique way of identifying it. E.g. for an AU, this would be an ID string that the component manager could use to retrieve the plugin. For a VST, it's the file path. */ String fileOrIdentifier; /** The last time the plugin file was changed. This is handy when scanning for new or changed plugins. */ Time lastFileModTime; /** A unique ID for the plugin. Note that this might not be unique between formats, e.g. a VST and some other format might actually have the same id. @see createIdentifierString */ int uid; /** True if the plugin identifies itself as a synthesiser. */ bool isInstrument; /** The number of inputs. */ int numInputChannels; /** The number of outputs. */ int numOutputChannels; /** Returns true if the two descriptions refer the the same plugin. This isn't quite as simple as them just having the same file (because of shell plugins). */ bool isDuplicateOf (const PluginDescription& other) const; //============================================================================== /** Returns a string that can be saved and used to uniquely identify the plugin again. This contains less info than the XML encoding, and is independent of the plugin's file location, so can be used to store a plugin ID for use across different machines. */ String createIdentifierString() const; //============================================================================== /** Creates an XML object containing these details. @see loadFromXml */ XmlElement* createXml() const; /** Reloads the info in this structure from an XML record that was previously saved with createXML(). Returns true if the XML was a valid plugin description. */ bool loadFromXml (const XmlElement& xml); private: //============================================================================== JUCE_LEAK_DETECTOR (PluginDescription) }; #endif // __JUCE_PLUGINDESCRIPTION_JUCEHEADER__