Skip to content

Commit 10a4a03

Browse files
committed
Work on #39
1 parent 549e81f commit 10a4a03

File tree

14 files changed

+360
-180
lines changed

14 files changed

+360
-180
lines changed

SmartImage 3/Mode/Shell/Assets/UI.cs

Lines changed: 94 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using System.Diagnostics;
1+
using System.Collections;
2+
using System.Diagnostics;
3+
using System.Runtime.CompilerServices;
24
using Kantan.Console;
35
using Kantan.Net.Utilities;
46
using SmartImage.Lib.Engines;
@@ -61,6 +63,95 @@ internal static void SetLabelStatus(Label lbl, bool? b)
6163
}
6264
}
6365

66+
public static void FromEnum2<TEnum>(this ListView lv, TEnum e) where TEnum : struct, Enum
67+
{
68+
var list = lv.Source.ToList<TEnum>().ToArray();
69+
70+
for (var i = 0; i < list.Length; i++) {
71+
// var flag = Enum.Parse<TEnum>(list[i].ToString());
72+
// var mark = e.HasFlag(flag);
73+
TEnum e2 = list[i];
74+
var mark = e.HasFlag(e2);
75+
76+
if (e2.Equals(default(TEnum))) {
77+
Debug.WriteLine($"Skipping {default(TEnum)}");
78+
continue;
79+
}
80+
81+
Debug.WriteLine($"{e}, {e2} -> {mark}");
82+
lv.Source.SetMark(i, mark);
83+
}
84+
}
85+
86+
public static TEnum GetEnum2<TEnum>(this IListDataSource lv, TEnum t = default) where TEnum : struct, Enum
87+
{
88+
var m = lv.GetItems<TEnum>();
89+
90+
TEnum t2 = t;
91+
92+
Debug.Assert(Unsafe.SizeOf<TEnum>() == Unsafe.SizeOf<int>());
93+
94+
unsafe {
95+
var ptr = (int*) Unsafe.AsPointer(ref t2);
96+
97+
foreach (var t1 in m) {
98+
TEnum tv = t1.Value;
99+
var val = (int*) Unsafe.AsPointer(ref tv);
100+
101+
if (t1.IsMarked) {
102+
*ptr |= *val;
103+
104+
}
105+
else {
106+
*ptr &= ~*val;
107+
}
108+
}
109+
110+
}
111+
112+
return t2;
113+
}
114+
115+
static IList<T> GetItems<T>(IListDataSource src)
116+
{
117+
var ls = new List<T>();
118+
var cpy = src.ToList();
119+
120+
for (int i = 0; i < src.Length; i++) {
121+
if (src.IsMarked(i)) {
122+
// ls.RemoveAt(i);
123+
ls.Add((T) (object) cpy[i]);
124+
}
125+
}
126+
127+
return ls;
128+
}
129+
130+
internal static void OnEngineSelected_(ListView lv, ref SearchEngineOptions e)
131+
{
132+
var l = lv.Source.ToList<SearchEngineOptions>().ToArray();
133+
134+
for (int i = 0; i < l.Length; i++) {
135+
if (lv.Source.IsMarked(i)) {
136+
switch (l[i]) {
137+
case SearchEngineOptions.None:
138+
e = SearchEngineOptions.None;
139+
goto ret;
140+
case SearchEngineOptions.All:
141+
e = SearchEngineOptions.All;
142+
goto ret;
143+
}
144+
145+
e |= l[i];
146+
}
147+
}
148+
149+
ret:
150+
lv.FromEnum2(e);
151+
152+
Debug.WriteLine($"{e}");
153+
}
154+
64155
internal static void OnEngineSelected(ListViewItemEventArgs args, ref SearchEngineOptions e, ListView lv)
65156
{
66157
var val = (SearchEngineOptions) args.Value;
@@ -89,10 +180,9 @@ internal static void OnEngineSelected(ListViewItemEventArgs args, ref SearchEngi
89180
lv.Source.SetMark(0, false);
90181
}
91182

92-
lv.FromEnum(e);
93-
183+
lv.FromEnum2(e);
184+
94185
lv.SetNeedsDisplay();
95186
Debug.WriteLine($"{val} {args.Item} -> {e} {isMarked}", nameof(OnEngineSelected));
96187
}
97-
98188
}

SmartImage 3/Mode/Shell/ShellMode.Dialog.cs

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,19 @@
11
// Read Stanton SmartImage ShellMain.Dialog.cs
22
// 2023-01-13 @ 11:28 PM
33

4+
using System.Collections;
45
using System.Data;
6+
using System.Diagnostics;
7+
using System.Runtime.CompilerServices;
58
using Kantan.Console;
9+
using Kantan.Text;
610
using Novus.OS;
711
using NStack;
812
using SmartImage.App;
913
using SmartImage.Lib;
1014
using SmartImage.Lib.Engines;
1115
using SmartImage.Mode.Shell.Assets;
16+
using SmartImage.Utilities;
1217
using Terminal.Gui;
1318

1419
namespace SmartImage.Mode.Shell;
@@ -139,21 +144,28 @@ void ReloadDialog()
139144
lvSearchEngines.OpenSelectedItem += args1 =>
140145
{
141146
SearchEngineOptions e = Config.SearchEngines;
142-
UI.OnEngineSelected(args1, ref e, lvSearchEngines);
147+
// UI.OnEngineSelected(args1, ref e, lvSearchEngines);
148+
UI.OnEngineSelected_(lvSearchEngines, ref e);
149+
Debug.WriteLine($"Setting {e}");
143150
Config.SearchEngines = e;
144151
ReloadDialog();
145152
};
146153

147154
lvPriorityEngines.OpenSelectedItem += args1 =>
148155
{
149156
SearchEngineOptions e = Config.PriorityEngines;
150-
UI.OnEngineSelected(args1, ref e, lvPriorityEngines);
157+
// UI.OnEngineSelected(args1, ref e, lvPriorityEngines);
158+
UI.OnEngineSelected_(lvPriorityEngines, ref e);
159+
Debug.WriteLine($"Setting {e}");
151160
Config.PriorityEngines = e;
152161
ReloadDialog();
153162
};
154163

155-
lvSearchEngines.FromEnum(Config.SearchEngines);
156-
lvPriorityEngines.FromEnum(Config.PriorityEngines);
164+
// Debug.WriteLine($"{GetItems<SearchEngineOptions>(lvSearchEngines.Source).QuickJoin()}");
165+
// lvSearchEngines.FromEnum2(Config.SearchEngines);
166+
// lvPriorityEngines.FromEnum2(Config.PriorityEngines);
167+
168+
// var e=lvSearchEngines.Source.GetEnum2(default(SearchEngineOptions));
157169

158170
/*============================================================================*\
159171
Checkboxes
@@ -305,7 +317,7 @@ Eh username/password
305317
dlCfg.Add(tvConfig, lvSearchEngines, lvPriorityEngines,
306318
cbContextMenu, cbOnTop, lbConfig, lbSearchEngines, lbPriorityEngines,
307319
lbHelp, cbAutoSearch, lbEhUsername, tfEhUsername, lbEhPassword, tfEhPassword,
308-
cbOpenRaw);
320+
cbOpenRaw);
309321

310322
dlCfg.AddButton(btnRefresh);
311323
dlCfg.AddButton(btnOk);
@@ -316,4 +328,5 @@ Eh username/password
316328
Tf_Input.SetFocus();
317329
Tf_Input.EnsureFocus();
318330
}
331+
319332
}

SmartImage 3/Utilities/ConsoleUtil.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
1-
using System.Runtime.InteropServices;
1+
using System.Diagnostics;
2+
using System.Runtime.CompilerServices;
3+
using System.Runtime.InteropServices;
24
using System.Runtime.Versioning;
35
using System.Text;
6+
using Kantan.Console;
47
using Novus.Win32;
58
using Novus.Win32.Structures.Kernel32;
69
using Novus.Win32.Structures.User32;
710
using SmartImage.App;
11+
using Terminal.Gui;
812

913
namespace SmartImage.Utilities;
1014

@@ -76,4 +80,5 @@ internal static void FlashTaskbar()
7680

7781
internal const int CODE_ERR = -1;
7882
internal const int CODE_OK = 0;
83+
7984
}

SmartImage.Lib 3/Engines/BaseSearchEngine.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
global using Url = Flurl.Url;
22
using System.Diagnostics;
33
using System.Drawing;
4+
using System.Json;
5+
using System.Resources;
46
using Novus.Utilities;
57
using SmartImage.Lib.Results;
68

@@ -32,6 +34,8 @@ protected BaseSearchEngine(string baseUrl)
3234
BaseUrl = baseUrl;
3335
}
3436

37+
protected JsonValue? Data => EngineData[Name.ToLower()];
38+
3539
static BaseSearchEngine() { }
3640

3741
public override string ToString()
@@ -98,4 +102,8 @@ protected virtual ValueTask<Url> GetRawUrlAsync(SearchQuery query)
98102

99103
public static readonly BaseSearchEngine[] All =
100104
ReflectionHelper.CreateAllInAssembly<BaseSearchEngine>(TypeProperties.Subclass).ToArray();
105+
106+
private static readonly MemoryStream EngineDataStream = new MemoryStream(Resources.data);
107+
108+
protected static readonly JsonValue? EngineData = JsonValue.Load(EngineDataStream);
101109
}

0 commit comments

Comments
 (0)