UI font setting (#18)

* UI font setting

* Fix detecting Bozja & Zadnor SK & CE

* update languages
This commit is contained in:
ksh 2021-06-19 21:07:01 +09:00 committed by GitHub
parent 5a9452d378
commit e59110cd2b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 234 additions and 58 deletions

View file

@ -48,6 +48,8 @@ LANG=日本語
207=新たなアップデートがあります! {0} → {1}
208=プラグインのウェブサイトでダウンロードしてください
209=https://github.com/kshman/DutyContent/releases/latest
210=UIフォント
211=バージョン: {0} / {1}
300=コンテンツ
301=コンテンツ
@ -112,3 +114,4 @@ LANG=日本語
10022=このパゲットデータを使いますか?セーブします
10023=選択
10024=コッピー
10025=地役: {0}

View file

@ -48,6 +48,8 @@ LANG=한국어(액토즈)
207=새 업데이트가 있습니다! {0} -> {1}
208=플러그인 웹사이트에서 받으세요.
209=https://github.com/kshman/DutyContent/releases/latest
210=UI 글꼴
211=버전: {0} / {1}
300=임무
301=콘텐츠
@ -112,3 +114,4 @@ LANG=한국어(액토즈)
10022=패킷 데이터를 적용하고 덮어쓰실거예요?
10023=선택함
10024=복사함
10025=지역: {0}

View file

@ -48,6 +48,8 @@ LANG=한국어
207=새 업데이트가 있습니다! {0} -> {1}
208=플러그인 웹사이트에서 받으세요.
209=https://github.com/kshman/DutyContent/releases/latest
210=UI 글꼴
211=버전: {0} / {1}
300=듀티
301=콘텐츠
@ -112,3 +114,4 @@ LANG=한국어
10022=패킷 데이터를 적용하고 덮어쓰실거예요?
10023=선택함
10024=카피함
10025=지역: {0}

View file

@ -3,18 +3,16 @@ using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace DutyContent
{
class DcConfig
{
public static int PluginTag => 10;
public static int PluginTag => 11;
public static Version PluginVersion => System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
public static bool PluginEnable { get; set; }
@ -32,7 +30,12 @@ namespace DutyContent
//
public static string Language { get; set; } = "";
public static bool DataRemoteUpdate { get; set; } = true; // true = use remote update
public static string UiFontFamily { get; set; } = "Microsoft Sans Serif";
// Microsoft Sans Serif / SegoUI
// GoyangIlsan R / Dotum / Malgun
// Bitstream Vera Sans Mono / Consolas
//
public static string BuildDataFileName(string header, string context, string ext)
{
return Path.Combine(DataPath, $"{header}-{context}.{ext}");
@ -70,6 +73,7 @@ namespace DutyContent
sw.WriteLine("# config");
sw.WriteLine("Language={0}", Language);
sw.WriteLine("DataRemoteUpdate={0}", DataRemoteUpdate);
sw.WriteLine("UiFontFamily={0}", UiFontFamily);
sw.WriteLine();
Duty.InternalSaveStream(sw);
@ -89,6 +93,7 @@ namespace DutyContent
Language = db["Language"];
DataRemoteUpdate = ThirdParty.Converter.ToBool(db["DataRemoteUpdate"], DataRemoteUpdate);
UiFontFamily = db.Get("UiFontFamily", UiFontFamily);
Duty.InternalReadFromDb(db);
}

View file

@ -257,5 +257,14 @@ namespace DutyContent
Delubrum,
Zadnor,
}
//
public static int SaveTheQueenTypeToCeBase(SaveTheQueenType stq)
{
return
stq == SaveTheQueenType.Bozja ? 30000 :
stq == SaveTheQueenType.Zadnor ? 30100 :
30100; // fail safe
}
}
}

View file

@ -346,6 +346,8 @@ namespace DutyContent
//
public void UpdateUiLocale()
{
ThirdParty.FontUtilities.SimpleChangeFont(this, DcConfig.UiFontFamily, true);
_act_label.Text = MesgLog.Text(1); // Duty ready
_act_tab.Text = MesgLog.Text(0); // FFXIV dc

View file

@ -108,6 +108,7 @@
<DependentUpon>UpdateNotifyForm.cs</DependentUpon>
</Compile>
<Compile Include="ThirdParty\Converter.cs" />
<Compile Include="ThirdParty\FontUtilities.cs" />
<Compile Include="ThirdParty\LineDb.cs" />
<Compile Include="ThirdParty\NativeMethods.cs" />
<Compile Include="ThirdParty\ThreadWorker.cs" />

View file

@ -48,6 +48,8 @@ LANG=English
207=New update found! {0} -> {1}
208=Visit DutyContent plugin repository for download.
209=https://github.com/kshman/DutyContent/releases/latest
210=UI Font
211=Version: {0} / {1}
300=Duty
301=Contents
@ -112,3 +114,4 @@ LANG=English
10022=Apply and overwrite packet data?
10023=Selected
10024=Copied
10025=Area: {0}

View file

@ -29,37 +29,63 @@ namespace DutyContent.Tab
/// </summary>
private void InitializeComponent()
{
this.panel1 = new System.Windows.Forms.Panel();
this.pnlBase = new System.Windows.Forms.Panel();
this.btnUiFont = new System.Windows.Forms.Button();
this.lblUiFont = new System.Windows.Forms.Label();
this.rdoDataUpdateRemote = new System.Windows.Forms.RadioButton();
this.rdoDataUpdateLocal = new System.Windows.Forms.RadioButton();
this.lblDataUpdate = new System.Windows.Forms.Label();
this.lblCurrentLang = new System.Windows.Forms.Label();
this.cboDispLang = new System.Windows.Forms.ComboBox();
this.lblDispLang = new System.Windows.Forms.Label();
this.panel1.SuspendLayout();
this.lblTag = new System.Windows.Forms.Label();
this.pnlBase.SuspendLayout();
this.SuspendLayout();
//
// panel1
// pnlBase
//
this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
this.pnlBase.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panel1.Controls.Add(this.rdoDataUpdateRemote);
this.panel1.Controls.Add(this.rdoDataUpdateLocal);
this.panel1.Controls.Add(this.lblDataUpdate);
this.panel1.Controls.Add(this.lblCurrentLang);
this.panel1.Controls.Add(this.cboDispLang);
this.panel1.Controls.Add(this.lblDispLang);
this.panel1.Location = new System.Drawing.Point(12, 12);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(776, 158);
this.panel1.TabIndex = 0;
this.pnlBase.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.pnlBase.Controls.Add(this.lblTag);
this.pnlBase.Controls.Add(this.btnUiFont);
this.pnlBase.Controls.Add(this.lblUiFont);
this.pnlBase.Controls.Add(this.rdoDataUpdateRemote);
this.pnlBase.Controls.Add(this.rdoDataUpdateLocal);
this.pnlBase.Controls.Add(this.lblDataUpdate);
this.pnlBase.Controls.Add(this.lblCurrentLang);
this.pnlBase.Controls.Add(this.cboDispLang);
this.pnlBase.Controls.Add(this.lblDispLang);
this.pnlBase.Location = new System.Drawing.Point(12, 12);
this.pnlBase.Name = "pnlBase";
this.pnlBase.Size = new System.Drawing.Size(776, 296);
this.pnlBase.TabIndex = 0;
//
// btnUiFont
//
this.btnUiFont.Location = new System.Drawing.Point(251, 165);
this.btnUiFont.Name = "btnUiFont";
this.btnUiFont.Size = new System.Drawing.Size(217, 38);
this.btnUiFont.TabIndex = 9;
this.btnUiFont.Text = "button1";
this.btnUiFont.UseVisualStyleBackColor = true;
this.btnUiFont.Click += new System.EventHandler(this.BtnUiFont_Click);
//
// lblUiFont
//
this.lblUiFont.AutoSize = true;
this.lblUiFont.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblUiFont.Location = new System.Drawing.Point(12, 165);
this.lblUiFont.Name = "lblUiFont";
this.lblUiFont.Size = new System.Drawing.Size(39, 20);
this.lblUiFont.TabIndex = 8;
this.lblUiFont.Text = "210";
//
// rdoDataUpdateRemote
//
this.rdoDataUpdateRemote.AutoSize = true;
this.rdoDataUpdateRemote.Checked = true;
this.rdoDataUpdateRemote.Location = new System.Drawing.Point(251, 80);
this.rdoDataUpdateRemote.Location = new System.Drawing.Point(251, 110);
this.rdoDataUpdateRemote.Name = "rdoDataUpdateRemote";
this.rdoDataUpdateRemote.Size = new System.Drawing.Size(43, 17);
this.rdoDataUpdateRemote.TabIndex = 7;
@ -71,7 +97,7 @@ namespace DutyContent.Tab
// rdoDataUpdateLocal
//
this.rdoDataUpdateLocal.AutoSize = true;
this.rdoDataUpdateLocal.Location = new System.Drawing.Point(251, 57);
this.rdoDataUpdateLocal.Location = new System.Drawing.Point(251, 87);
this.rdoDataUpdateLocal.Name = "rdoDataUpdateLocal";
this.rdoDataUpdateLocal.Size = new System.Drawing.Size(43, 17);
this.rdoDataUpdateLocal.TabIndex = 6;
@ -83,15 +109,15 @@ namespace DutyContent.Tab
//
this.lblDataUpdate.AutoSize = true;
this.lblDataUpdate.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblDataUpdate.Location = new System.Drawing.Point(12, 54);
this.lblDataUpdate.Location = new System.Drawing.Point(12, 84);
this.lblDataUpdate.Name = "lblDataUpdate";
this.lblDataUpdate.Size = new System.Drawing.Size(39, 20);
this.lblDataUpdate.TabIndex = 5;
this.lblDataUpdate.Text = "201";
this.lblDataUpdate.Text = "203";
//
// lblCurrentLang
//
this.lblCurrentLang.Location = new System.Drawing.Point(318, 37);
this.lblCurrentLang.Location = new System.Drawing.Point(318, 67);
this.lblCurrentLang.Name = "lblCurrentLang";
this.lblCurrentLang.Size = new System.Drawing.Size(150, 15);
this.lblCurrentLang.TabIndex = 4;
@ -102,7 +128,7 @@ namespace DutyContent.Tab
//
this.cboDispLang.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cboDispLang.FormattingEnabled = true;
this.cboDispLang.Location = new System.Drawing.Point(251, 13);
this.cboDispLang.Location = new System.Drawing.Point(251, 43);
this.cboDispLang.Name = "cboDispLang";
this.cboDispLang.Size = new System.Drawing.Size(217, 21);
this.cboDispLang.TabIndex = 1;
@ -112,35 +138,47 @@ namespace DutyContent.Tab
//
this.lblDispLang.AutoSize = true;
this.lblDispLang.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblDispLang.Location = new System.Drawing.Point(12, 11);
this.lblDispLang.Location = new System.Drawing.Point(12, 41);
this.lblDispLang.Name = "lblDispLang";
this.lblDispLang.Size = new System.Drawing.Size(39, 20);
this.lblDispLang.TabIndex = 0;
this.lblDispLang.Text = "201";
//
// lblTag
//
this.lblTag.AutoSize = true;
this.lblTag.Location = new System.Drawing.Point(27, 4);
this.lblTag.Name = "lblTag";
this.lblTag.Size = new System.Drawing.Size(35, 13);
this.lblTag.TabIndex = 10;
this.lblTag.Text = "label1";
//
// ConfigForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoScroll = true;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.panel1);
this.Controls.Add(this.pnlBase);
this.Name = "ConfigForm";
this.Text = "Config";
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
this.pnlBase.ResumeLayout(false);
this.pnlBase.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Panel pnlBase;
private System.Windows.Forms.Label lblDispLang;
private System.Windows.Forms.ComboBox cboDispLang;
private System.Windows.Forms.Label lblCurrentLang;
private System.Windows.Forms.RadioButton rdoDataUpdateRemote;
private System.Windows.Forms.RadioButton rdoDataUpdateLocal;
private System.Windows.Forms.Label lblDataUpdate;
private System.Windows.Forms.Button btnUiFont;
private System.Windows.Forms.Label lblUiFont;
private System.Windows.Forms.Label lblTag;
}
}

View file

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
@ -64,6 +65,11 @@ namespace DutyContent.Tab
lblDataUpdate.Text = MesgLog.Text(203);
rdoDataUpdateLocal.Text = MesgLog.Text(204);
rdoDataUpdateRemote.Text = MesgLog.Text(205);
lblUiFont.Text = MesgLog.Text(210);
btnUiFont.Text = DcConfig.UiFontFamily;
lblTag.Text = MesgLog.Text(211, DcConfig.PluginTag, DcConfig.PluginVersion);
}
public static List<string> MakeConfigLangList()
@ -134,5 +140,32 @@ namespace DutyContent.Tab
{
InternalDataUpdate(true);
}
private void BtnUiFont_Click(object sender, EventArgs e)
{
Font ret = (Font)WorkerAct.Invoker(new WorkerAct.ObjectReturnerDelegate(() =>
{
FontDialog dg = new FontDialog
{
Font = btnUiFont.Font,
FontMustExist = true,
AllowVerticalFonts = false,
AllowVectorFonts = false,
ShowColor = false,
ShowEffects = false,
MaxSize = 12,
MinSize = 12,
};
return dg.ShowDialog() == DialogResult.OK ? dg.Font : null;
}));
if (ret != null)
{
DcConfig.UiFontFamily = ret.Name;
DcControl.Self.UpdateUiLocale();
DcConfig.SaveConfig();
}
}
}
}

View file

@ -9,8 +9,6 @@ using System.Net;
using System.Net.Http;
using System.Text;
using System.IO;
using System.Runtime.InteropServices;
using System.Collections.Specialized;
namespace DutyContent.Tab
{
@ -21,12 +19,16 @@ namespace DutyContent.Tab
//
private bool _is_lock_fate;
private short _last_fate = 0;
//
private bool _is_packet_finder;
private DcContent.SaveTheQueenType _stq_type = DcContent.SaveTheQueenType.No;
private DcConfig.PacketConfig _new_packet;
//
private Dictionary<string, string> _packet_list = new Dictionary<string, string>();
//private OrderedDictionary _packet_list = new OrderedDictionary();
//
private Overlay.DutyOvForm _overlay;
@ -54,10 +56,6 @@ namespace DutyContent.Tab
RefreshDatasetList();
RefreshPacketList();
//
var font = new Font(DcConfig.Duty.LogFontFamily, DcConfig.Duty.LogFontSize, FontStyle.Regular, GraphicsUnit.Point);
txtContentLog.Font = font;
btnLogFont.Font = font;
btnLogFont.Text = $"{DcConfig.Duty.LogFontFamily}, {DcConfig.Duty.LogFontSize}";
//
@ -179,6 +177,11 @@ namespace DutyContent.Tab
btnPacketStart.Text = MesgLog.Text(10007);
btnPacketApply.Text = MesgLog.Text(10009);
//
var logfont = new Font(DcConfig.Duty.LogFontFamily, DcConfig.Duty.LogFontSize, FontStyle.Regular);
txtContentLog.Font = logfont;
btnLogFont.Font = logfont;
}
public void PacketHandler(string pid, byte[] message)
@ -220,6 +223,8 @@ namespace DutyContent.Tab
NotifyFate(fate);
_overlay.PlayFate(fate);
}
_last_fate = (short)fcode;
}
}
else if (chkShowDebug.Checked && data[0] == 62 && data[8] > 0) // more than 0%
@ -231,6 +236,8 @@ namespace DutyContent.Tab
var fate = DcContent.TryFate(fcode);
if (fate == null)
LogDebug("unknown fate {0}% \"{1}\"", data[8], fcode);
_last_fate = (short)fcode;
}
}
}
@ -328,12 +335,17 @@ namespace DutyContent.Tab
// 10[1] status 0=end, 1=register, 2=entry, 3=progress
// 12[1] progress percentage
var stq =
_stq_type == DcContent.SaveTheQueenType.Bozja ? 30000 :
_stq_type == DcContent.SaveTheQueenType.Zadnor ? 30100 :
30100; // temporary
if (_stq_type == DcContent.SaveTheQueenType.No)
{
if (IsFateForSouthernBozja(_last_fate))
_stq_type = DcContent.SaveTheQueenType.Bozja;
else if (IsFateForZadnor(_last_fate))
_stq_type = DcContent.SaveTheQueenType.Zadnor;
else
_stq_type = DcContent.SaveTheQueenType.Zadnor;
}
var ce = stq + data[8];
var ce = data[8] + DcContent.SaveTheQueenTypeToCeBase(_stq_type);
var stat = data[10];
if (stat == 0 /* || data[10] == 3 */)
@ -381,8 +393,10 @@ namespace DutyContent.Tab
(zone_id == 921) ? DcContent.SaveTheQueenType.Zadnor :
DcContent.SaveTheQueenType.No;
LogInstance(10025, zone_name);
if (chkShowDebug.Checked)
LogDebug("Zone: {0} \"{1}\"", zone_id, zone_name);
LogDebug("Zone: {0}", zone_id);
}
//
@ -1099,9 +1113,9 @@ namespace DutyContent.Tab
_is_packet_finder = false;
PacketFinderResetUi(false);
// is this good idea?
// no bad idea
//cboPacketset.SelectedIndex = 0;
// select custom
DcConfig.Duty.PacketSet = DcConfig.PacketConfig.DefaultSetNameCustom;
RefreshPacketList();
}
}
@ -1130,8 +1144,6 @@ namespace DutyContent.Tab
if (lstPacketInfo.SelectedIndices.Count != 1)
return;
//MesgLog.Write("double clicked: {0}", lstPacketInfo.SelectedIndices[0]);
var v = int.MaxValue;
switch (lstPacketInfo.SelectedIndices[0])
@ -1182,25 +1194,52 @@ namespace DutyContent.Tab
}
private static readonly short[] _packet_target_fates =
// middle la noscea
private static readonly short[] _fates_middle_la_noscea =
{
// middle la noscea
553, 649, 687, 688, 693, 717,
220, 221, 222, 223, 225, 226, 227, 229, 231, 233, 235, 237, 238, 239, 240,
1387,
};
// southern bozja front
// southern bozja front
private static readonly short[] _fates_southern_bojza =
{
1597, 1598, 1599,
1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609,
1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619,
1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628,
};
// zadnor
// zadnor
private static readonly short[] _fates_zadnor =
{
1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724,
1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732,
1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742,
};
//
private bool IsFateInFindList(short code)
{
return
_fates_middle_la_noscea.Contains(code) ||
_fates_southern_bojza.Contains(code) ||
_fates_zadnor.Contains(code);
}
//
private bool IsFateForSouthernBozja(short code)
{
return _fates_southern_bojza.Contains(code);
}
//
private bool IsFateForZadnor(short code)
{
return _fates_zadnor.Contains(code);
}
//
private void PacketFinderHandler(byte[] message)
{
@ -1211,7 +1250,7 @@ namespace DutyContent.Tab
if (_new_packet.OpFate == 0 && data.Length > 4 && data[0] == 0x3E)
{
var cc = BitConverter.ToInt16(data, 4);
if (_packet_target_fates.Contains(cc) && _new_packet.OpFate != opcode)
if (IsFateInFindList(cc) && _new_packet.OpFate != opcode)
{
_new_packet.OpFate = opcode;
@ -1221,6 +1260,8 @@ namespace DutyContent.Tab
lstPacketInfo.Items[0].SubItems[3].Text = _new_packet.OpFate.ToString();
});
_last_fate = cc;
return;
}
}
@ -1343,11 +1384,17 @@ namespace DutyContent.Tab
if (ok)
{
var stq =
_stq_type == DcContent.SaveTheQueenType.Bozja ? 30000 :
_stq_type == DcContent.SaveTheQueenType.Zadnor ? 30100 :
30100; // temporary
var ce = DcContent.GetFate(code + stq);
if (_stq_type == DcContent.SaveTheQueenType.No)
{
if (IsFateForSouthernBozja(_last_fate))
_stq_type = DcContent.SaveTheQueenType.Bozja;
else if (IsFateForZadnor(_last_fate))
_stq_type = DcContent.SaveTheQueenType.Zadnor;
else
_stq_type = DcContent.SaveTheQueenType.Zadnor;
}
var ce = DcContent.GetFate(code + DcContent.SaveTheQueenTypeToCeBase(_stq_type));
var li = new ListViewItem(new string[]
{

29
ThirdParty/FontUtilities.cs vendored Normal file
View file

@ -0,0 +1,29 @@
using System.Drawing;
using System.Windows.Forms;
namespace DutyContent.ThirdParty
{
// https://www.codeproject.com/Questions/1080006/How-can-change-application-font-in-runtime
public static class FontUtilities
{
public static void SimpleChangeFont(Control ctrl, string fontname, bool recursive = false)
{
ctrl.Font = new Font(fontname, ctrl.Font.Size, ctrl.Font.Style, GraphicsUnit.Point);
if (recursive)
InternalRecursiveChangeFont(fontname, ctrl.Controls);
}
private static void InternalRecursiveChangeFont(string fontname, Control.ControlCollection ctrls)
{
foreach (Control c in ctrls)
{
c.Font = new Font(fontname, c.Font.Size, c.Font.Style, GraphicsUnit.Point);
if (c.Controls.Count > 0)
InternalRecursiveChangeFont(fontname, c.Controls);
}
}
}
}