private List <PresetVoiLut> GetApplicablePresets()
        {
            List <PresetVoiLut> presets = new List <PresetVoiLut>();

            if (this.SelectedPresentationImage is IImageSopProvider)
            {
                //Only temporary until we enable the full functionality in the presets.
                PresetVoiLut autoPreset = new PresetVoiLut(new AutoPresetVoiLutOperationComponent());
                autoPreset.KeyStroke = XKeys.F2;
                presets.Add(autoPreset);

                ImageSop sop = ((IImageSopProvider)this.SelectedPresentationImage).ImageSop;

                PresetVoiLutGroupCollection groups = PresetVoiLutSettings.DefaultInstance.GetPresetGroups();
                PresetVoiLutGroup           group  = CollectionUtils.SelectFirst(groups,
                                                                                 delegate(PresetVoiLutGroup testGroup)
                {
                    return(testGroup.AppliesTo(sop));
                });
                if (group != null)
                {
                    foreach (PresetVoiLut preset in group.Clone().Presets)
                    {
                        if (preset.Operation.AppliesTo(this.SelectedPresentationImage))
                        {
                            presets.Add(preset);
                        }
                    }
                }

                presets.Sort(new PresetVoiLutComparer());
            }

            return(presets);
        }
		public PresetVoiLutGroupCollection GetPresetGroups()
		{
			if (_presetGroups != null)
				return _presetGroups;

			_presetGroups = new PresetVoiLutGroupCollection();

			XmlDocument document = new XmlDocument();
			document.LoadXml(this.SettingsXml);

			XmlNodeList groupNodes = document.SelectNodes("//group");
			foreach (XmlElement groupNode in groupNodes)
			{
				PresetVoiLutGroup group = DeserializeGroup(groupNode);
				if (group != null && !_presetGroups.Contains(group))
					_presetGroups.Add(group);
			}

			return _presetGroups;
		}
		public void SetPresetGroups(PresetVoiLutGroupCollection groups)
		{
			try
			{
				XmlDocument document = new XmlDocument();
				XmlElement rootElement = document.CreateElement("preset-voi-luts");
				document.AppendChild(rootElement);

				foreach (PresetVoiLutGroup group in groups)
				{
					if (group.Presets.Count == 0)
						continue;

					XmlElement groupNode = document.CreateElement("group");
					if (!String.IsNullOrEmpty(group.Modality))
						groupNode.SetAttribute("modality", group.Modality);

					rootElement.AppendChild(groupNode);

					XmlElement presetsElement = document.CreateElement("presets");
					groupNode.AppendChild(presetsElement);

					foreach (PresetVoiLut preset in group.Presets)
					{
						XmlElement presetElement = document.CreateElement("preset");
						presetsElement.AppendChild(presetElement);

						if (preset.KeyStroke != XKeys.None)
							presetElement.SetAttribute("keystroke", preset.KeyStroke.ToString());

						PresetVoiLutConfiguration configuration = preset.Operation.GetConfiguration();

						presetElement.SetAttribute("factory", configuration.FactoryName);

						XmlElement configurationElement = document.CreateElement("configuration");
						presetElement.AppendChild(configurationElement);
						
						foreach (KeyValuePair<string, string> configurationItem in configuration)
						{
							if (String.IsNullOrEmpty(configurationItem.Key) || String.IsNullOrEmpty(configurationItem.Value))
								continue;

							XmlElement configurationItemElement = document.CreateElement("item");
							configurationItemElement.SetAttribute("key", configurationItem.Key);
							configurationItemElement.SetAttribute("value", configurationItem.Value);

							configurationElement.AppendChild(configurationItemElement);
						}
					}	
				}

				_presetGroups = null;
				string currentSettings = this.SettingsXml;

				this.SettingsXml = document.OuterXml;
				this.Save();
			}
			catch (Exception e)
			{
				Platform.Log(LogLevel.Error, e);
			}
		}