/* * Greenshot - a free and open source screenshot tool * Copyright (C) 2007-2013 Thomas Braun, Jens Klingen, Robin Krom * * For more information see: http://getgreenshot.org/ * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 1 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ using Greenshot.Drawing.Fields; using Greenshot.IniFile; using GreenshotPlugin.UnmanagedHelpers; using System; using System.Collections.Generic; using System.Drawing; namespace Greenshot.Configuration { /// /// Description of CoreConfiguration. /// [IniSection("Editor", Description = "Greenshot editor configuration")] public class EditorConfiguration : IniSection { [IniProperty("RecentColors", Separator = "|", Description = "Last used colors")] public List RecentColors; [IniProperty("LastFieldValue", Separator = "|", Description = "Field values, make sure the last used settings are re-used")] public Dictionary LastUsedFieldValues; [IniProperty("MatchSizeToCapture", Description = "Match the editor window size to the capture", DefaultValue = "True")] public bool MatchSizeToCapture; [IniProperty("WindowPlacementFlags", Description = "Placement flags", DefaultValue = "0")] public WindowPlacementFlags WindowPlacementFlags; [IniProperty("WindowShowCommand", Description = "Show command", DefaultValue = "Normal")] public ShowWindowCommand ShowWindowCommand; [IniProperty("WindowMinPosition", Description = "Position of minimized window", DefaultValue = "-1,-1")] public Point WindowMinPosition; [IniProperty("WindowMaxPosition", Description = "Position of maximized window", DefaultValue = "-1,-1")] public Point WindowMaxPosition; [IniProperty("WindowNormalPosition", Description = "Position of normal window", DefaultValue = "100,100,600,500")] public Rectangle WindowNormalPosition; [IniProperty("ReuseEditor", Description = "Reuse already open editor", DefaultValue = "false")] public bool ReuseEditor; [IniProperty("FreehandSensitivity", Description = "The smaller this number, the less smoothing is used. Decrease for detailed drawing, e.g. when using a pen. Increase for smoother lines. e.g. when you want to draw a smooth line.", DefaultValue = "3")] public int FreehandSensitivity; [IniProperty("SuppressSaveDialogAtClose", Description = "Suppressed the 'do you want to save' dialog when closing the editor.", DefaultValue = "False")] public bool SuppressSaveDialogAtClose; /// Type of the class for which to create the field /// FieldType of the field to construct /// FieldType of the field to construct /// a new Field of the given fieldType, with the scope of it's value being restricted to the Type scope public Field CreateField(Type requestingType, FieldType fieldType, object preferredDefaultValue) { string requestingTypeName = requestingType.Name; string requestedField = requestingTypeName + "." + fieldType.Name; object fieldValue = preferredDefaultValue; // Check if the configuration exists if (LastUsedFieldValues == null) { LastUsedFieldValues = new Dictionary(); } // Check if settings for the requesting type exist, if not create! if (LastUsedFieldValues.ContainsKey(requestedField)) { // Check if a value is set (not null)! if (LastUsedFieldValues[requestedField] != null) { fieldValue = LastUsedFieldValues[requestedField]; } else { // Overwrite null value LastUsedFieldValues[requestedField] = fieldValue; } } else { LastUsedFieldValues.Add(requestedField, fieldValue); } Field returnField = new Field(fieldType, requestingType); returnField.Value = fieldValue; return returnField; } public void UpdateLastFieldValue(Field field) { string requestedField = field.Scope + "." + field.FieldType.Name; // Check if the configuration exists if (LastUsedFieldValues == null) { LastUsedFieldValues = new Dictionary(); } // check if settings for the requesting type exist, if not create! if (LastUsedFieldValues.ContainsKey(requestedField)) { LastUsedFieldValues[requestedField] = field.myValue; } else { LastUsedFieldValues.Add(requestedField, field.myValue); } } public WindowPlacement GetEditorPlacement() { WindowPlacement placement = WindowPlacement.Default; placement.NormalPosition = new RECT(WindowNormalPosition); placement.MaxPosition = new POINT(WindowMaxPosition); placement.MinPosition = new POINT(WindowMinPosition); placement.ShowCmd = ShowWindowCommand; placement.Flags = WindowPlacementFlags; return placement; } public void SetEditorPlacement(WindowPlacement placement) { WindowNormalPosition = placement.NormalPosition.ToRectangle(); WindowMaxPosition = placement.MaxPosition.ToPoint(); WindowMinPosition = placement.MinPosition.ToPoint(); ShowWindowCommand = placement.ShowCmd; WindowPlacementFlags = placement.Flags; } } }