Data model:

plugin name / id (internal - plugin defined):
  preset name (user facing - user defined):
    parameter name (internal - plugin defined): value
    parameter name: value
    parameter name: value
    ...
  preset name:
    parameter name: value
    parameter name: value
    parameter name: value
    ...
  ...
...

  can partially specify parameters

Data storage:
  many XML files, named based on plugin id
  request for a plugin loads XML files for that plugin
  defaults stored in /usr/share/apps....
  user mods stored in ~/.kde/share/apps...
  user overrides system
  user can delete preset.  store entry like:
    <plugin name="Foo" deleted="true"/> in user file
  user can clear paramter value.  store entry like:
    <parameter name="Foo" deleted="true"/> in user file

  
UI:
  combo box in plugin apply dialog loads preset
  save box in plugin apply dialog writes user file
  edit button opens preset editor for that plugin

  preset editor: tree to select plugin / preset
    grid of parameter , values
    can edit, add, delete 
    param names are strings so anything can be entered:
      do nothing
      validate
      fill in all parameters in grid: empty indicates no setting

Implementation:
  applying a preset will iterate over (param, value) list:
    set control[param] to value
    need way to access controls by name:
      UiControlInfoList access by name
      setValue method in UiControlInfo (like value())

  plugin dialog:
    sub class from EditApplyDialog (renamed to EditApplyDialogBase)
    reference to preset manager
    ctor populates preset combo with names/id by looking up plugin id (arg to
    ctor) in preset manager. also pass control list in ctor.
    changed signal of combo box triggers load of settings from preset manager
    save button writes current settings to preset manager (need to determine
    which have changed - or just save the lot: partial parameter sets become
    an advanced feature).
    
  plugin does not need to know about preset manager

Issues:

What types can values take? (float at least)

How to handle i18n of preset names?
  internal key based on english (or first defined) name
  i18n translation to user facing name
  for new presets key generated from user entered name (whatever lang)
