private static void sSaveDefaultKeyInSettings(Settings settings, bool saveOnDisk)
        {
            // PATCH FIX BECAUSE DOT NET FRAMEWORK IS BUGGED
            // Indeed the "Ctrl" string doesn't not exist on german OS (the key name is "Strg"),
            // so the default setting fail to load if you put a CTRL as default key in the default
            // Setting. So instead we save the default key here if the default key is not saved
            // and then after the application will be able to reload correctly the settings
            bool needToSave = false;

            if (settings.MouseMultipleSelectionKey == Keys.None)
            {
                settings.MouseMultipleSelectionKey = Keys.Control;
                needToSave = true;
            }
            if (settings.MouseDuplicateSelectionKey == Keys.None)
            {
                settings.MouseDuplicateSelectionKey = Keys.Alt;
                needToSave = true;
            }
            if (settings.MouseZoomPanKey == Keys.None)
            {
                settings.MouseZoomPanKey = Keys.Shift;
                needToSave = true;
            }

            // try to save (never mind if we can not (for example BlueBrick is launched
            // from a write protected drive)
            try
            {
                if (saveOnDisk && needToSave)
                    settings.Save();
            }
            catch
            {
            }
        }
 private void copySettings(Settings destination, Settings source, TabPageFilter tabPageFilter)
 {
     // general
     if ((tabPageFilter & TabPageFilter.GENERAL) != 0)
     {
         // language
         destination.Language = source.Language.Clone() as string;
         // map
         destination.AddBrickLayerOnNewMap = source.AddBrickLayerOnNewMap;
         destination.AddGridLayerOnNewMap = source.AddGridLayerOnNewMap;
         destination.AddAreaLayerOnNewMap = source.AddAreaLayerOnNewMap;
         destination.AddTextLayerOnNewMap = source.AddTextLayerOnNewMap;
         destination.AddRulerLayerOnNewMap = source.AddRulerLayerOnNewMap;
         destination.DefaultAuthor = source.DefaultAuthor.Clone() as string;
         destination.DefaultLUG = source.DefaultLUG.Clone() as string;
         destination.DefaultShow = source.DefaultShow.Clone() as string;
         // performance
         destination.StartSavedMipmapLevel = source.StartSavedMipmapLevel;
         // recent files
         destination.MaxRecentFilesNum = source.MaxRecentFilesNum;
         // undo/redo
         destination.UndoStackDepth = source.UndoStackDepth;
         destination.UndoStackDisplayedDepth = source.UndoStackDisplayedDepth;
         // Notification
         destination.DisplayWarningMessageForNotSavingInBBM = source.DisplayWarningMessageForNotSavingInBBM;
         destination.DisplayWarningMessageForBrickNotAddedDueToBudgetLimitation = source.DisplayWarningMessageForBrickNotAddedDueToBudgetLimitation;
         destination.DisplayWarningMessageForBrickNotCopiedDueToBudgetLimitation = source.DisplayWarningMessageForBrickNotCopiedDueToBudgetLimitation;
         destination.DisplayWarningMessageForBrickNotReplacedDueToBudgetLimitation = source.DisplayWarningMessageForBrickNotReplacedDueToBudgetLimitation;
         destination.DisplayWarningMessageForShowingBudgetNumbers = source.DisplayWarningMessageForShowingBudgetNumbers;
     }
     // edition
     if ((tabPageFilter & TabPageFilter.EDITION) != 0)
     {
         // mouse
         destination.MouseMultipleSelectionKey = source.MouseMultipleSelectionKey;
         destination.WheelMouseIsZoomOnCursor = source.WheelMouseIsZoomOnCursor;
         destination.WheelMouseZoomSpeed = source.WheelMouseZoomSpeed;
         // copy/paste
         destination.OffsetAfterCopyStyle = source.OffsetAfterCopyStyle;
         destination.OffsetAfterCopyValue = source.OffsetAfterCopyValue;
         // ruler
         destination.RulerControlPointRadiusInPixel = source.RulerControlPointRadiusInPixel;
         destination.SwitchToEditionAfterRulerCreation = source.SwitchToEditionAfterRulerCreation;
         // line appearance
         destination.RulerDefaultLineThickness = source.RulerDefaultLineThickness;
         destination.RulerDefaultLineColor = source.RulerDefaultLineColor;
         destination.RulerDefaultAllowOffset = source.RulerDefaultAllowOffset;
         // guideline appearance
         destination.RulerDefaultDashPatternLine = source.RulerDefaultDashPatternLine;
         destination.RulerDefaultDashPatternSpace = source.RulerDefaultDashPatternSpace;
         destination.RulerDefaultGuidelineThickness = source.RulerDefaultGuidelineThickness;
         destination.RulerDefaultGuidelineColor = source.RulerDefaultGuidelineColor;
         // measure and unit
         destination.RulerDefaultDisplayUnit = source.RulerDefaultDisplayUnit;
         destination.RulerDefaultDisplayMeasureText = source.RulerDefaultDisplayMeasureText;
         destination.RulerDefaultUnit = source.RulerDefaultUnit;
         destination.RulerDefaultFontColor = source.RulerDefaultFontColor;
         destination.RulerDefaultFont = source.RulerDefaultFont.Clone() as Font;
     }
     // appearance
     if ((tabPageFilter & TabPageFilter.APPEARANCE) != 0)
     {
         destination.DefaultBackgroundColor = source.DefaultBackgroundColor;
         destination.DefaultAreaTransparency = source.DefaultAreaTransparency;
         destination.DefaultAreaSize = source.DefaultAreaSize;
         destination.GammaForSelection = source.GammaForSelection;
         destination.GammaForSnappingPart = source.GammaForSnappingPart;
         destination.DefaultGridColor = source.DefaultGridColor;
         destination.DefaultGridSize = source.DefaultGridSize;
         destination.DefaultGridEnabled = source.DefaultGridEnabled;
         destination.DefaultSubDivisionNumber = source.DefaultSubDivisionNumber;
         destination.DefaultSubGridEnabled = source.DefaultSubGridEnabled;
         destination.DefaultSubGridColor = source.DefaultSubGridColor;
         destination.DefaultTextColor = source.DefaultTextColor;
         destination.DefaultTextFont = source.DefaultTextFont.Clone() as Font;
     }
     // part lib
     if ((tabPageFilter & TabPageFilter.PART_LIBRARY) != 0)
     {
         destination.PartLibTabOrder = new System.Collections.Specialized.StringCollection();
         foreach (string text in source.PartLibTabOrder)
             destination.PartLibTabOrder.Add(text.Clone() as string);
         destination.PartLibBackColor = source.PartLibBackColor;
         destination.PartLibShowOnlyBudgetedPartsColor = source.PartLibShowOnlyBudgetedPartsColor;
         destination.PartLibFilteredBackColor = source.PartLibFilteredBackColor;
         destination.BudgetFilenameToLoadAtStartup = source.BudgetFilenameToLoadAtStartup;
         destination.IsDefaultBudgetInfinite = source.IsDefaultBudgetInfinite;
         destination.PartLibBubbleInfoPartID = source.PartLibBubbleInfoPartID;
         destination.PartLibBubbleInfoPartColor = source.PartLibBubbleInfoPartColor;
         destination.PartLibBubbleInfoPartDescription = source.PartLibBubbleInfoPartDescription;
         destination.PartLibDisplayBubbleInfo = source.PartLibDisplayBubbleInfo;
     }
     // shortcut
     if ((tabPageFilter & TabPageFilter.SHORTCUT_KEYS) != 0)
     {
         destination.ShortcutKey = new System.Collections.Specialized.StringCollection();
         foreach (string text in source.ShortcutKey)
             destination.ShortcutKey.Add(text.Clone() as string);
     }
 }
 /// <summary>
 /// Reset the settings which belong to the specified page, to the default values
 /// </summary>
 /// <param name="tabPageFilter">A bit field that decribe the page that should be reset</param>
 private void resetSettings(TabPageFilter tabPageFilter)
 {
     // reset the settings (except the language)
     string currentLanguage = Settings.Default.Language;
     // create a new setting object cause we only want to copy the settings of the tab page, not the UI settings
     Settings defaultSetting = new Settings();
     defaultSetting.Upgrade();
     defaultSetting.Reset();
     sSaveDefaultKeyInSettings(defaultSetting, false);
     // restore the language
     defaultSetting.Language = currentLanguage;
     // now copy only the settings specified with the default settings
     copySettings(Settings.Default, defaultSetting, tabPageFilter);
     // init the controls
     initControlValues(true, tabPageFilter);
 }