diff --git a/src/Decentralized/CandleChart.cs b/src/Decentralized/CandleChart.cs
index a76086e..e6fcb04 100644
--- a/src/Decentralized/CandleChart.cs
+++ b/src/Decentralized/CandleChart.cs
@@ -212,17 +212,20 @@ namespace Decentralized
}
}
- /// 把一个币的图放进界面:说明一行、图、图例一行。
+ /// 把一个币的图放进界面:说明一行、黑框包裹的图、图例一行。
public static void Add(CustomUIBuilder b, string key, string asset, double threshold = 0)
{
var all = Session.Data.Candles.Of(asset);
- b.AddLabel(Caption(asset, all));
+ b.AddLabel(Caption(asset, all), "chart_caption_dim");
+ b.BeginPanel(W * Scale + 4f, H * Scale + 4f, TextAnchor.MiddleCenter, 2f, 0f, "chart_bezel");
+ PledgerSkin.Slice(b.Last.image, "ui_hw_bezel", 5);
b.AddImage(Render(key, all, threshold), W * Scale, H * Scale);
- b.AddLabel(L.T(threshold > 0 ? "chart.legend.thr" : "chart.legend"));
+ b.End();
+ b.AddLabel(L.T(threshold > 0 ? "chart.legend.thr" : "chart.legend"), "chart_legend_dim");
}
- /// 带币种切换的图:上面一排币种按钮(选中的加方括号),切换后重画。
- public static void AddPicker(CustomUIBuilder b, string key, string fallback, Action refresh)
+ /// 带币种切换的图:上面一排币种按钮(选中项带准星角标),切换后重画。
+ public static void AddPicker(CustomUIBuilder b, string key, string fallback, Action refresh, ICollection picked = null)
{
var list = ChartAssets.Where(a => a != Assets.Ponero || Unlock.BlackUnlocked).ToList();
if (!Picked.TryGetValue(key, out var cur) || !list.Contains(cur)) cur = fallback;
@@ -230,7 +233,7 @@ namespace Decentralized
foreach (var a in list)
{
string asset = a;
- b.AddButton(asset == cur ? "[" + asset + "]" : asset, () => { Picked[key] = asset; refresh(); });
+ PledgerSkin.Pick(b, asset, asset == cur, () => { Picked[key] = asset; refresh(); }, picked);
}
b.End();
Add(b, key, cur);
diff --git a/src/Decentralized/TerminalWindow.cs b/src/Decentralized/TerminalWindow.cs
index 5544089..f7dacb7 100644
--- a/src/Decentralized/TerminalWindow.cs
+++ b/src/Decentralized/TerminalWindow.cs
@@ -1,7 +1,9 @@
using System;
+using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using UnityEngine;
+using UnityEngine.UI;
using Decentralized.Domain;
namespace Decentralized
@@ -13,6 +15,8 @@ namespace Decentralized
public static class TerminalWindow
{
public const string Id = "pd_terminal";
+ private const float WinW = 828f, WinH = 680f, ScreenW = 768f, ScreenH = 578f, Bezel = 6f;
+ private const float LeftW = 420f, RightW = 310f;
private enum Page { Home, Bank, Poinbase, Web3, Wallets }
private static Page _page = Page.Home;
@@ -22,22 +26,34 @@ namespace Decentralized
private static string _amount = "";
private static string _message;
+ private static readonly List _picked = new List();
+ private static readonly List _clear = new List();
+ private static readonly List _rows = new List();
+
public static void Open()
{
if (Session.Data == null) return;
var b = CustomUIManager.Window(Id, L.T("term.title"));
if (b == null) return;
- b.SetSize(780, 660).SetDraggable(true).SetCloseOnEscape(true).UseMachineryStyle();
- b.BeginRow();
+ _picked.Clear(); _clear.Clear(); _rows.Clear();
+ b.SetSize(WinW, WinH).SetDraggable(true).SetCloseOnEscape(true).UseMachineryStyle();
+ // 黑色外边框包裹墨水屏
+ b.BeginPanel(ScreenW + Bezel * 2, ScreenH + Bezel * 2, TextAnchor.MiddleCenter, Bezel + 3f, 0f);
+ var bezel = b.Last.image;
+ b.BeginPanel(ScreenW, ScreenH, TextAnchor.UpperLeft, 12f, 4f);
+ var screen = b.CurrentContainer;
+ var paper = b.Last.image;
+ b.BeginRow(4f, TextAnchor.MiddleLeft);
foreach (Page p in Enum.GetValues(typeof(Page)))
{
var page = p;
string name = L.T("tab." + p.ToString().ToLowerInvariant());
- b.AddButton(page == _page ? $"[{name}]" : name, () => { _page = page; _message = null; _edit = null; Open(); });
+ PledgerSkin.Pick(b, name, page == _page, () => { _page = page; _message = null; _edit = null; Open(); }, _picked);
}
b.End();
b.AddSeparator();
- b.BeginScroll(540);
+ b.BeginScroll(ScreenH - 52f);
+ _clear.Add(b.Last.image);
switch (_page)
{
case Page.Home: HomePage(b); break;
@@ -48,8 +64,11 @@ namespace Decentralized
default: break;
}
b.End();
- if (!string.IsNullOrEmpty(_message)) b.AddLabel(_message);
- b.Show();
+ if (!string.IsNullOrEmpty(_message)) b.AddLabel(_message, "term_note");
+ b.End();
+ b.End();
+ var win = b.Show();
+ Log.Guard("交易终端外观", () => PledgerSkin.Apply(win, screen, bezel, paper, _picked, _clear, _rows));
}
private static void Go(Page p) { _page = p; _message = null; _edit = null; Open(); }
@@ -63,11 +82,14 @@ namespace Decentralized
private static void Entry(CustomUIBuilder b, string icon, string name, string line1, string line2, Page target)
{
- b.BeginPanel(220f, 250f, TextAnchor.UpperCenter, 10f, 6f);
+ b.BeginPanel(230f, 250f, TextAnchor.UpperCenter, 10f, 6f);
+ var cardImg = b.Last.image;
+ cardImg.sprite = MachineryStyle.White;
+ cardImg.color = PledgerSkin.RowNormal;
b.AddImage(ModInfo.Id + ":" + icon, 96f, 96f);
b.AddHeader(name);
b.AddLabel(line1);
- if (line2 != null) b.AddLabel(line2);
+ if (line2 != null) b.AddLabel(line2, "entry_l2_dim");
b.AddFlexibleSpace();
b.AddButton(L.T("home.enter"), () => Go(target));
b.End();
@@ -87,40 +109,61 @@ namespace Decentralized
b.AddSpace(8f);
b.AddSeparator();
var r = d.LastNight;
- b.AddLabel(r == null ? L.T("report.none") : L.T("home.lastnight", r.Day, Fmt.Num(r.Mined), r.PoweredRigs, r.Rigs));
+ b.AddLabel(r == null ? L.T("report.none") : L.T("home.lastnight", r.Day, Fmt.Num(r.Mined), r.PoweredRigs, r.Rigs), "report_dim");
}
- private const float LeftW = 430f, RightW = 300f;
-
- private static void Cell(CustomUIBuilder b, float w, string text, bool header = false)
+ private static void Cell(CustomUIBuilder b, float w, string text, bool header = false, TextAnchor align = TextAnchor.MiddleLeft)
{
- b.BeginPanel(w, 30f, TextAnchor.MiddleLeft, 6f, 0f);
+ b.BeginPanel(w, 26f, align, 0f, 0f);
+ _clear.Add(b.Last.image);
b.AddLabel(header ? "" + text + "" : text);
b.End();
}
- private static void TableRow(CustomUIBuilder b, float[] widths, params string[] cells)
+ private static void TableRow(CustomUIBuilder b, float totalW, float[] widths, TextAnchor[] aligns, string[] cells, bool selected = false, Action onClick = null)
{
- b.BeginRow(2f);
- for (int i = 0; i < widths.Length; i++) Cell(b, widths[i], i < cells.Length ? cells[i] : "");
+ b.BeginPanel(totalW, 28f, TextAnchor.MiddleLeft, 4f, 0f);
+ _rows.Add(new PledgerSkin.RowDef { Root = b.Last.root, Image = b.Last.image, Selected = selected, OnClick = onClick });
+ b.BeginRow(0f, TextAnchor.MiddleLeft);
+ for (int i = 0; i < widths.Length; i++)
+ {
+ var align = (aligns != null && i < aligns.Length) ? aligns[i] : (i == 0 ? TextAnchor.MiddleLeft : TextAnchor.MiddleRight);
+ Cell(b, widths[i], i < cells.Length ? cells[i] : "", false, align);
+ }
+ b.End();
b.End();
}
- private static void TableHeader(CustomUIBuilder b, float[] widths, params string[] cells)
+ private static void TableRow(CustomUIBuilder b, float[] widths, params string[] cells) =>
+ TableRow(b, widths.Sum() + 8f, widths, null, cells, false, null);
+
+ private static void TableHeader(CustomUIBuilder b, float totalW, float[] widths, TextAnchor[] aligns, params string[] cells)
{
- b.BeginRow(2f);
- for (int i = 0; i < widths.Length; i++) Cell(b, widths[i], cells[i], true);
+ b.BeginPanel(totalW, 26f, TextAnchor.MiddleLeft, 4f, 0f);
+ _clear.Add(b.Last.image);
+ b.BeginRow(0f, TextAnchor.MiddleLeft);
+ for (int i = 0; i < widths.Length; i++)
+ {
+ var align = (aligns != null && i < aligns.Length) ? aligns[i] : (i == 0 ? TextAnchor.MiddleLeft : TextAnchor.MiddleRight);
+ Cell(b, widths[i], i < cells.Length ? cells[i] : "", true, align);
+ }
+ b.End();
b.End();
}
+ private static void TableHeader(CustomUIBuilder b, float[] widths, params string[] cells) =>
+ TableHeader(b, widths.Sum() + 8f, widths, null, cells);
+
/// 左右分栏:左边是账户与持仓表格,右边是操作区。
private static void Columns(CustomUIBuilder b, Action left, Action right)
{
b.BeginRow(10f);
- b.BeginPanel(LeftW, -1f, TextAnchor.UpperLeft, 8f, 4f);
+ b.BeginPanel(LeftW, -1f, TextAnchor.UpperLeft, 4f, 4f);
+ _clear.Add(b.Last.image);
left(b);
b.End();
- b.BeginPanel(RightW, -1f, TextAnchor.UpperLeft, 8f, 6f);
+ b.BeginPanel(RightW, -1f, TextAnchor.UpperLeft, 4f, 6f);
+ _clear.Add(b.Last.image);
right(b);
b.End();
b.End();
@@ -129,7 +172,8 @@ namespace Decentralized
private static void AmountRow(CustomUIBuilder b)
{
b.AddLabel(L.T("trade.amount"));
- b.BeginPanel(RightW - 30f, -1f, TextAnchor.MiddleCenter, 0f, 0f); // 给输入框一个固定宽度,容得下大额数字
+ b.BeginPanel(RightW - 30f, -1f, TextAnchor.MiddleCenter, 0f, 0f);
+ _clear.Add(b.Last.image);
b.AddInput("0", _amount, s => _amount = s, "amount", s => _amount = s);
b.End();
}