OSDN Git Service

C# 8.0 のnull許容参照型を有効化
[opentween/open-tween.git] / OpenTween / Setting / SettingLocal.cs
index 7d4e7d1..eb4a608 100644 (file)
 // the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
 // Boston, MA 02110-1301, USA.
 
+#nullable enable
+
 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Drawing;
 using System.Xml.Serialization;
+using OpenTween.Connection;
 
 namespace OpenTween
 {
-    [Serializable]
-    public class SettingLocal : SettingBase<SettingLocal>
+    public class SettingLocal : SettingBase<SettingLocal>, IDisposable
     {
-#region Settingクラス基本
+        #region Settingクラス基本
         public static SettingLocal Load()
-        {
-            return LoadSettings();
-        }
+            => LoadSettings();
 
         public void Save()
-        {
-            SaveSettings(this);
-        }
-#endregion
+            => SaveSettings(this);
+        #endregion
 
-        private FontConverter _fc = new FontConverter();
-        private ColorConverter _cc = new ColorConverter();
+        /// <summary>
+        /// ウィンドウサイズ等の保存時のDPI
+        /// </summary>
+        public SizeF ScaleDimension = SizeF.Empty;
 
         public Point FormLocation = new Point(0, 0);
         public int SplitterDistance = 200;
-        public int AdSplitterDistance = 350;
         public Size FormSize = new Size(600, 500);
+
+        /// <summary>
+        /// 文末ステータス
+        /// </summary>
         public string StatusText = "";
+
         public bool UseRecommendStatus = false;
         public int Width1 = 48;
         public int Width2 = 80;
@@ -74,7 +78,7 @@ namespace OpenTween
         public int DisplayIndex7 = 0;
         public int DisplayIndex8 = 7;
         public string BrowserPath = "";
-        public HttpConnection.ProxyType ProxyType = HttpConnection.ProxyType.IE;
+        public ProxyType ProxyType = ProxyType.IE;
         public string ProxyAddress = "127.0.0.1";
         public int ProxyPort = 80;
         public string ProxyUser = "";
@@ -86,168 +90,183 @@ namespace OpenTween
         public Font FontUnread = new Font(SystemFonts.DefaultFont, FontStyle.Bold | FontStyle.Underline);
         public string FontUnreadStr
         {
-            get { return _fc.ConvertToString(FontUnread); }
-            set { FontUnread = (Font)_fc.ConvertFromString(value); }
+            get => this.FontToString(this.FontUnread);
+            set => this.FontUnread = this.StringToFont(value);
         }
 
         [XmlIgnore]
         public Color ColorUnread = System.Drawing.SystemColors.ControlText;
         public string ColorUnreadStr
         {
-            get { return _cc.ConvertToString(ColorUnread); }
-            set { ColorUnread = (Color)_cc.ConvertFromString(value); }
+            get => this.ColorToString(this.ColorUnread);
+            set => this.ColorUnread = this.StringToColor(value);
         }
 
         [XmlIgnore]
         public Font FontRead = System.Drawing.SystemFonts.DefaultFont;
         public string FontReadStr
         {
-            get { return _fc.ConvertToString(FontRead); }
-            set { FontRead = (Font)_fc.ConvertFromString(value); }
+            get => this.FontToString(this.FontRead);
+            set => this.FontRead = this.StringToFont(value);
         }
 
         [XmlIgnore]
         public Color ColorRead = System.Drawing.SystemColors.ControlText;
         public string ColorReadStr
         {
-            get { return _cc.ConvertToString(ColorRead); }
-            set { ColorRead = (Color)_cc.ConvertFromString(value); }
+            get => this.ColorToString(this.ColorRead);
+            set => this.ColorRead = this.StringToColor(value);
         }
 
         [XmlIgnore]
         public Color ColorFav = Color.FromKnownColor(System.Drawing.KnownColor.Red);
         public string ColorFavStr
         {
-            get { return _cc.ConvertToString(ColorFav); }
-            set { ColorFav = (Color)_cc.ConvertFromString(value); }
+            get => this.ColorToString(this.ColorFav);
+            set => this.ColorFav = this.StringToColor(value);
         }
 
         [XmlIgnore]
         public Color ColorOWL = Color.FromKnownColor(System.Drawing.KnownColor.Blue);
         public string ColorOWLStr
         {
-            get { return _cc.ConvertToString(ColorOWL); }
-            set { ColorOWL = (Color)_cc.ConvertFromString(value); }
+            get => this.ColorToString(this.ColorOWL);
+            set => this.ColorOWL = this.StringToColor(value);
         }
 
         [XmlIgnore]
         public Color ColorRetweet = Color.FromKnownColor(System.Drawing.KnownColor.Green);
         public string ColorRetweetStr
         {
-            get { return _cc.ConvertToString(ColorRetweet); }
-            set { ColorRetweet = (Color)_cc.ConvertFromString(value); }
+            get => this.ColorToString(this.ColorRetweet);
+            set => this.ColorRetweet = this.StringToColor(value);
         }
 
         [XmlIgnore]
         public Font FontDetail = System.Drawing.SystemFonts.DefaultFont;
         public string FontDetailStr
         {
-            get { return _fc.ConvertToString(FontDetail); }
-            set { FontDetail = (Font)_fc.ConvertFromString(value); }
+            get => this.FontToString(this.FontDetail);
+            set => this.FontDetail = this.StringToFont(value);
         }
 
         [XmlIgnore]
         public Color ColorSelf = Color.FromKnownColor(System.Drawing.KnownColor.AliceBlue);
         public string ColorSelfStr
         {
-            get { return _cc.ConvertToString(ColorSelf); }
-            set { ColorSelf = (Color)_cc.ConvertFromString(value); }
+            get => this.ColorToString(this.ColorSelf);
+            set => this.ColorSelf = this.StringToColor(value);
         }
 
         [XmlIgnore]
         public Color ColorAtSelf = Color.FromKnownColor(System.Drawing.KnownColor.AntiqueWhite);
         public string ColorAtSelfStr
         {
-            get { return _cc.ConvertToString(ColorAtSelf); }
-            set { ColorAtSelf = (Color)_cc.ConvertFromString(value); }
+            get => this.ColorToString(this.ColorAtSelf);
+            set => this.ColorAtSelf = this.StringToColor(value);
         }
 
         [XmlIgnore]
         public Color ColorTarget = Color.FromKnownColor(System.Drawing.KnownColor.LemonChiffon);
         public string ColorTargetStr
         {
-            get { return _cc.ConvertToString(ColorTarget); }
-            set { ColorTarget = (Color)_cc.ConvertFromString(value); }
+            get => this.ColorToString(this.ColorTarget);
+            set => this.ColorTarget = this.StringToColor(value);
         }
 
         [XmlIgnore]
         public Color ColorAtTarget = Color.FromKnownColor(System.Drawing.KnownColor.LavenderBlush);
         public string ColorAtTargetStr
         {
-            get { return _cc.ConvertToString(ColorAtTarget); }
-            set { ColorAtTarget = (Color)_cc.ConvertFromString(value); }
+            get => this.ColorToString(this.ColorAtTarget);
+            set => this.ColorAtTarget = this.StringToColor(value);
         }
 
         [XmlIgnore]
         public Color ColorAtFromTarget = Color.FromKnownColor(System.Drawing.KnownColor.Honeydew);
         public string ColorAtFromTargetStr
         {
-            get { return _cc.ConvertToString(ColorAtFromTarget); }
-            set { ColorAtFromTarget = (Color)_cc.ConvertFromString(value); }
+            get => this.ColorToString(this.ColorAtFromTarget);
+            set => this.ColorAtFromTarget = this.StringToColor(value);
         }
 
         [XmlIgnore]
         public Color ColorAtTo = Color.FromKnownColor(System.Drawing.KnownColor.Pink);
         public string ColorAtToStr
         {
-            get { return _cc.ConvertToString(ColorAtTo); }
-            set { ColorAtTo = (Color)_cc.ConvertFromString(value); }
+            get => this.ColorToString(this.ColorAtTo);
+            set => this.ColorAtTo = this.StringToColor(value);
         }
 
         [XmlIgnore]
         public Color ColorInputBackcolor = Color.FromKnownColor(System.Drawing.KnownColor.LemonChiffon);
         public string ColorInputBackcolorStr
         {
-            get { return _cc.ConvertToString(ColorInputBackcolor); }
-            set { ColorInputBackcolor = (Color)_cc.ConvertFromString(value); }
+            get => this.ColorToString(this.ColorInputBackcolor);
+            set => this.ColorInputBackcolor = this.StringToColor(value);
         }
 
         [XmlIgnore]
         public Color ColorInputFont = Color.FromKnownColor(System.Drawing.KnownColor.ControlText);
         public string ColorInputFontStr
         {
-            get { return _cc.ConvertToString(ColorInputFont); }
-            set { ColorInputFont = (Color)_cc.ConvertFromString(value); }
+            get => this.ColorToString(this.ColorInputFont);
+            set => this.ColorInputFont = this.StringToColor(value);
         }
 
         [XmlIgnore]
         public Font FontInputFont = System.Drawing.SystemFonts.DefaultFont;
         public string FontInputFontStr
         {
-            get { return _fc.ConvertToString(FontInputFont); }
-            set { FontInputFont = (Font)_fc.ConvertFromString(value); }
+            get => this.FontToString(this.FontInputFont);
+            set => this.FontInputFont = this.StringToFont(value);
         }
 
         [XmlIgnore]
         public Color ColorListBackcolor = Color.FromKnownColor(System.Drawing.KnownColor.Window);
         public string ColorListBackcolorStr
         {
-            get { return _cc.ConvertToString(ColorListBackcolor); }
-            set { ColorListBackcolor = (Color)_cc.ConvertFromString(value); }
+            get => this.ColorToString(this.ColorListBackcolor);
+            set => this.ColorListBackcolor = this.StringToColor(value);
         }
 
         [XmlIgnore]
         public Color ColorDetailBackcolor = Color.FromKnownColor(System.Drawing.KnownColor.Window);
         public string ColorDetailBackcolorStr
         {
-            get { return _cc.ConvertToString(ColorDetailBackcolor); }
-            set { ColorDetailBackcolor = (Color)_cc.ConvertFromString(value); }
+            get => this.ColorToString(this.ColorDetailBackcolor);
+            set => this.ColorDetailBackcolor = this.StringToColor(value);
         }
 
         [XmlIgnore]
         public Color ColorDetail = Color.FromKnownColor(System.Drawing.KnownColor.ControlText);
         public string ColorDetailStr
         {
-            get { return _cc.ConvertToString(ColorDetail); }
-            set { ColorDetail = (Color)_cc.ConvertFromString(value); }
+            get => this.ColorToString(this.ColorDetail);
+            set => this.ColorDetail = this.StringToColor(value);
         }
 
         [XmlIgnore]
         public Color ColorDetailLink = Color.FromKnownColor(System.Drawing.KnownColor.Blue);
         public string ColorDetailLinkStr
         {
-            get { return _cc.ConvertToString(ColorDetailLink); }
-            set { ColorDetailLink = (Color)_cc.ConvertFromString(value); }
+            get => this.ColorToString(this.ColorDetailLink);
+            set => this.ColorDetailLink = this.StringToColor(value);
+        }
+
+        [XmlIgnore]
+        public Font? FontUIGlobal = null;
+
+        /// <summary>
+        /// [隠し設定] UI フォントを指定します
+        /// </summary>
+        /// <remarks>
+        /// フォントによっては一部レイアウトが崩れるためこっそり追加
+        /// </remarks>
+        public string? FontUIGlobalStr
+        {
+            get => this.FontUIGlobal != null ? this.FontToString(this.FontUIGlobal) : null;
+            set => this.FontUIGlobal = value != null ? this.StringToFont(value) : null;
         }
 
         [XmlIgnore]
@@ -256,7 +275,7 @@ namespace OpenTween
         {
             get
             {
-                string pwd = ProxyPassword;
+                var pwd = ProxyPassword;
                 if (string.IsNullOrEmpty(pwd)) pwd = "";
                 if (pwd.Length > 0)
                 {
@@ -276,7 +295,7 @@ namespace OpenTween
             }
             set
             {
-                string pwd = value;
+                var pwd = value;
                 if (string.IsNullOrEmpty(pwd)) pwd = "";
                 if (pwd.Length > 0)
                 {
@@ -292,5 +311,53 @@ namespace OpenTween
                 ProxyPassword = pwd;
             }
         }
+
+        /// <summary>
+        /// 絵文字の表示に Twemoji (https://github.com/twitter/twemoji) を使用するか
+        /// </summary>
+        public bool UseTwemoji = true;
+
+        [XmlIgnore]
+        private readonly FontConverter fontConverter = new FontConverter();
+
+        protected string FontToString(Font font)
+            => this.fontConverter.ConvertToString(font);
+
+        protected Font StringToFont(string str)
+            => (Font)this.fontConverter.ConvertFromString(str);
+
+        [XmlIgnore]
+        private readonly ColorConverter colorConverter = new ColorConverter();
+
+        protected string ColorToString(Color color)
+            => this.colorConverter.ConvertToString(color);
+
+        protected Color StringToColor(string str)
+            => (Color)this.colorConverter.ConvertFromString(str);
+
+        /// <summary>
+        /// 指定されたスケールと SettingLocal.ScaleDimension のスケールとの拡大比を返します
+        /// </summary>
+        public SizeF GetConfigScaleFactor(SizeF currentSizeDimension)
+            => new SizeF(
+                currentSizeDimension.Width / this.ScaleDimension.Width,
+                currentSizeDimension.Height / this.ScaleDimension.Height);
+
+        public void Dispose()
+        {
+            this.Dispose(true);
+            GC.SuppressFinalize(this);
+        }
+
+        protected virtual void Dispose(bool disposing)
+        {
+            if (disposing)
+            {
+                this.FontUnread?.Dispose();
+                this.FontRead?.Dispose();
+                this.FontDetail?.Dispose();
+                this.FontInputFont?.Dispose();
+            }
+        }
     }
 }