/// <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();
                }
            }
        }
        /// <summary>
        /// Loads settings from registry storage (on package load)
        /// </summary>
        public override void LoadSettingsFromStorage()
        {
            VisualLocalizerPackage package     = VisualLocalizerPackage.Instance;
            RegistryKey            rootKey     = package.UserRegistryRoot;
            RegistryKey            settingsKey = null;

            try {
                settingsKey = rootKey.OpenSubKey(REG_KEY, false);
                if (settingsKey != null)
                {
                    RegistryKey filtersKey = settingsKey.OpenSubKey(FILTER_KEY);

                    if (filtersKey != null)
                    {
                        SettingsObject.Instance.IgnorePropertyChanges = true;

                        SettingsObject.Instance.ShowContextColumn              = ReadBoolFromRegKey(filtersKey, "ShowFilterContext");
                        SettingsObject.Instance.UseReflectionInAsp             = ReadBoolFromRegKey(filtersKey, "UseReflectionInAsp");
                        SettingsObject.Instance.NamespacePolicyIndex           = ReadIntFromRegKey(filtersKey, "NamespacePolicyIndex");
                        SettingsObject.Instance.MarkNotLocalizableStringsIndex = ReadIntFromRegKey(filtersKey, "MarkNotLocalizableStringsIndex");
                        SettingsObject.Instance.BatchMoveSplitterDistance      = ReadIntFromRegKey(filtersKey, "BatchMoveSplitterDistance", 110);
                        SettingsObject.Instance.SelectedKeyIndex         = ReadIntFromRegKey(filtersKey, "SelectedKeyIndex", 0);
                        SettingsObject.Instance.SelectedUseFullName      = ReadBoolFromRegKey(filtersKey, "SelectedUseFullName");
                        SettingsObject.Instance.SelectedResourceFilePath = (string)filtersKey.GetValue("SelectedResourceFilePath", null);

                        foreach (var pair in SettingsObject.Instance.CommonLocalizabilityCriteria)
                        {
                            LocalizationCommonCriterion crit = pair.Value;
                            object val = filtersKey.GetValue(crit.Name);
                            if (val != null)
                            {
                                crit.FromRegData(val.ToString());
                            }
                        }

                        SettingsObject.Instance.CustomLocalizabilityCriteria.Clear();
                        int customCriteriaCount = ReadIntFromRegKey(filtersKey, "CustomCriteriaCount", 0);
                        for (int i = 0; i < customCriteriaCount; i++)
                        {
                            object val = filtersKey.GetValue("CustomCriteria" + i);
                            if (val != null)
                            {
                                LocalizationCustomCriterion crit = new LocalizationCustomCriterion(LocalizationCriterionAction.VALUE, 0);
                                crit.FromRegData(val.ToString());
                                SettingsObject.Instance.CustomLocalizabilityCriteria.Add(crit);
                            }
                        }
                    }
                    else
                    {
                        ResetSettings();
                    }
                }
                else
                {
                    ResetSettings();
                }
            } finally {
                if (settingsKey != null)
                {
                    settingsKey.Close();
                }

                SettingsObject.Instance.IgnorePropertyChanges = false;
                SettingsObject.Instance.NotifySettingsLoaded();
            }
        }