BSE Categories
==============

The purpose of BSE Categories is to provide a mapping of the functionality
provided by BSE and its plugins to the GUI frontends. They are used to
give the front-ends a hirarchical structure to group certain services and
to aid the user in finding required functionality.

Object Categories
-----------------

Exported BSE objects (and some internal ones) and procedures are
"categorized" to easily integrate them into menu or similar operation
structures in GUIs.

Objects that are derived from the BseSource class with the main intend
to be used as signal modules (filters) in a synthesis network are
categorized under the "/Modules/" toplevel category, ordered by operational
categories.

Procedure Categories
--------------------

Procedures are categorized in a similar way under the "/Proc/" toplevel
category.
Such procedures that serve as object methods, e.g. to alter the object's
state in a certain way, get their name prefixed with the object type
they take as first argument and get categorized under "<OType>/".
The prefixing works by constructing the final procedure name out of
<OBJECT_TYPE> a prefix seperator "+" and the actuall procedure name.
The prefixing keeps a name space seperation for similar procedure names
across hirarchy branches, so equally named procedures can be introduced
for different purposes, with different implemenatations or argument lists
for classes that do not inherit from each other.

Aliasing/Mapping
----------------

A certain BSE type (procedure or object) may have certain categories
applying to it, thus a category->type aliasing is allowed.
While the reverse does not hold true, i.e. a specific category always
maps to one single type, not all types need to have a category
assigned to them.


Examples to show the above schemata
-----------------------------------

{M|P}[A] Module, Procedure, Effect or Aliasing tag
|  Name					Category
-------------------------------------------------------------------------------
M  BseSine				/Modules/Generators/Sine
M  BseNoise				/Modules/Generators/Noise
M  BseLowPass				/Modules/Filters/Low Pass
M  BseRoom				/Modules/Effects/Echo/Room
M  BseResonance				/Modules/Effects/Echo/Resonance
M  BseVocoder				/Modules/Filters/Vocoder
MA BseVocoder				/Modules/Effects/Misc/Vocoder

P  hello-world				/Proc/Test/Hello World
P  load-wave				/Proc/Loader/WAVE
P  BsePattern+set-instrument		/Method/BsePattern/Basic/Set Instrument
P  BsePattern+set-note			/Method/BsePattern/Basic/Set Note
P  BsePattern+select-all		/Method/BsePattern/Select/All
P  BsePattern+cut-selection		/Method/BsePattern/Edit/Cut

E  BseEffectFineTune			/Effect/Fine Tune
E  BseEffectNoteVolume			/Effect/Note Volume
E  BseEffectPatternBreak		/Effect/Pattern Break
E  BseEffectVolumeDelta			/Effect/Volume Delta
