/// <summary>
        /// Saves settings to XML (on settings export)
        /// </summary>
        public override void SaveSettingsToXml(IVsSettingsWriter writer)
        {
            WriteBoolToXml(writer, "ShowFilterContext", SettingsObject.Instance.ShowContextColumn);
            WriteBoolToXml(writer, "UseReflectionInAsp", SettingsObject.Instance.UseReflectionInAsp);
            WriteIntToXml(writer, "MarkNotLocalizableStringsIndex", SettingsObject.Instance.MarkNotLocalizableStringsIndex);
            WriteIntToXml(writer, "NamespacePolicyIndex", SettingsObject.Instance.NamespacePolicyIndex);
            WriteIntToXml(writer, "BatchMoveSplitterDistance", SettingsObject.Instance.BatchMoveSplitterDistance);
            WriteIntToXml(writer, "SelectedKeyIndex", SettingsObject.Instance.SelectedKeyIndex);
            WriteBoolToXml(writer, "SelectedUseFullName", SettingsObject.Instance.SelectedUseFullName);

            if (SettingsObject.Instance.SelectedResourceFilePath != null)
            {
                writer.WriteSettingString("SelectedResourceFilePath", SettingsObject.Instance.SelectedResourceFilePath);
            }

            foreach (var pair in SettingsObject.Instance.CommonLocalizabilityCriteria)
            {
                LocalizationCommonCriterion crit = pair.Value;
                writer.WriteSettingString(crit.Name, crit.ToRegData());
            }

            WriteIntToXml(writer, "CustomCriteriaCount", SettingsObject.Instance.CustomLocalizabilityCriteria.Count);

            for (int i = 0; i < SettingsObject.Instance.CustomLocalizabilityCriteria.Count; i++)
            {
                int hr = writer.WriteSettingString("CustomCriteria" + i, SettingsObject.Instance.CustomLocalizabilityCriteria[i].ToRegData());
                if (hr != VSConstants.S_OK)
                {
                    writer.ReportError("CustomCriteria value cannot be written", (uint)__VSSETTINGSERRORTYPES.vsSettingsErrorTypeError);
                }
            }
        }
        /// <summary>
        /// Saves settings to registry storage
        /// </summary>
        public override void SaveSettingsToStorage()
        {
            VisualLocalizerPackage package     = VisualLocalizerPackage.Instance;
            RegistryKey            rootKey     = package.UserRegistryRoot;
            RegistryKey            settingsKey = null;

            try {
                settingsKey = rootKey.CreateSubKey(REG_KEY);
                RegistryKey filterKey = settingsKey.CreateSubKey(FILTER_KEY);

                WriteBoolToRegKey(filterKey, "ShowFilterContext", SettingsObject.Instance.ShowContextColumn);
                WriteBoolToRegKey(filterKey, "UseReflectionInAsp", SettingsObject.Instance.UseReflectionInAsp);
                WriteIntToRegKey(filterKey, "NamespacePolicyIndex", SettingsObject.Instance.NamespacePolicyIndex);
                WriteIntToRegKey(filterKey, "MarkNotLocalizableStringsIndex", SettingsObject.Instance.MarkNotLocalizableStringsIndex);
                WriteIntToRegKey(filterKey, "BatchMoveSplitterDistance", SettingsObject.Instance.BatchMoveSplitterDistance);
                WriteIntToRegKey(filterKey, "SelectedKeyIndex", SettingsObject.Instance.SelectedKeyIndex);
                WriteBoolToRegKey(filterKey, "SelectedUseFullName", SettingsObject.Instance.SelectedUseFullName);

                if (SettingsObject.Instance.SelectedResourceFilePath != null)
                {
                    filterKey.SetValue("SelectedResourceFilePath", SettingsObject.Instance.SelectedResourceFilePath);
                }

                foreach (var pair in SettingsObject.Instance.CommonLocalizabilityCriteria)
                {
                    LocalizationCommonCriterion crit = pair.Value;
                    filterKey.SetValue(crit.Name, crit.ToRegData());
                }

                int count = ReadIntFromRegKey(filterKey, "CustomCriteriaCount");
                for (int i = 0; i < count; i++)
                {
                    filterKey.DeleteValue("CustomCriteria" + i, false);
                }
                for (int i = 0; i < SettingsObject.Instance.CustomLocalizabilityCriteria.Count; i++)
                {
                    filterKey.SetValue("CustomCriteria" + i, SettingsObject.Instance.CustomLocalizabilityCriteria[i].ToRegData());
                }
                WriteIntToRegKey(filterKey, "CustomCriteriaCount", SettingsObject.Instance.CustomLocalizabilityCriteria.Count);
            } finally {
                if (settingsKey != null)
                {
                    settingsKey.Close();
                }
            }
        }