Skip to content

Commit d1ecdf2

Browse files
committed
Input field UX/UI
1 parent 1ae6486 commit d1ecdf2

File tree

5 files changed

+60
-76
lines changed

5 files changed

+60
-76
lines changed

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ private async Task RunMain()
3232

3333
private void Clear()
3434
{
35+
Tf_Input.ReadOnly = false;
36+
3537
Tf_Input.DeleteAll();
3638
Tf_Input.ClearHistoryChanges();
3739

@@ -57,5 +59,8 @@ private void Clear()
5759
Tf_Input.SetFocus();
5860
Tf_Input.EnsureFocus();
5961
Btn_Cancel.Enabled = false;
62+
63+
m_queue.Clear();
64+
6065
}
6166
}

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,8 @@ private void Restart_Clicked()
8585
/// </summary>
8686
private async void Run_Clicked()
8787
{
88-
Btn_Run.Enabled = false;
88+
Btn_Run.Enabled = false;
89+
// Btn_Delete.Enabled = false;
8990

9091
var text = Tf_Input.Text;
9192

@@ -146,12 +147,16 @@ private void InputInfo_Clicked()
146147

147148
private static void Clear_Clicked()
148149
{
150+
Tf_Input.ReadOnly = false;
149151
Tf_Input.DeleteAll();
150152
UI.SetLabelStatus(Lbl_InputOk, null);
151153
Lbl_InputOk.SetNeedsDisplay();
152154
Lbl_InputInfo.Text = ustring.Empty;
153155
Lbl_InputInfo2.Text = ustring.Empty;
154156
Lbl_Status2.Text = ustring.Empty;
157+
158+
Tf_Input.SetFocus();
159+
// Btn_Delete.Enabled = false;
155160
}
156161

157162
private void Cancel_Clicked()

SmartImage 3/Mode/Shell/ShellMode.cs

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -199,13 +199,20 @@ public sealed partial class ShellMode : IDisposable, IMode
199199

200200
};
201201

202-
private static readonly Button Btn_Queue = new("Queue")
202+
private static readonly CheckBox Cb_Queue = new()
203203
{
204204
X = Pos.X(Btn_Run),
205205
Y = Pos.Bottom(Btn_Run),
206206

207+
};
208+
209+
private static readonly Button Btn_Queue = new("Queue")
210+
{
211+
X = Pos.Right(Cb_Queue),
212+
Y = Pos.Y(Cb_Queue),
213+
207214
Height = Dim.Height(Btn_Run),
208-
ColorScheme = UI.Cs_Lbl1
215+
ColorScheme = UI.Cs_Btn1
209216

210217
};
211218

@@ -260,6 +267,8 @@ public sealed partial class ShellMode : IDisposable, IMode
260267

261268
internal ManualResetEvent IsReady { get; set; }
262269

270+
private readonly ConcurrentQueue<ustring> m_queue;
271+
263272
#endregion
264273

265274
#endregion
@@ -273,6 +282,7 @@ public ShellMode(string[] args)
273282
Query = SearchQuery.Null;
274283
Client = new SearchClient(new SearchConfig());
275284
IsReady = new ManualResetEvent(false);
285+
m_queue = new();
276286

277287
m_results = new();
278288

@@ -295,7 +305,7 @@ public ShellMode(string[] args)
295305
m_cbCallbackTok = Application.MainLoop.AddTimeout(TimeoutTimeSpan, ClipboardCallback);
296306

297307
m_clipboard = new List<ustring>();
298-
308+
299309
Mb_Menu.Menus = new MenuBarItem[]
300310
{
301311
new("_About", null, AboutDialog),
@@ -373,17 +383,32 @@ public ShellMode(string[] args)
373383

374384
if (!string.IsNullOrWhiteSpace(file)) {
375385
Query.Dispose();
386+
Debug.WriteLine($"{IsQueryReady()}");
376387
FileSystem.DeleteFile(file, UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin);
377388
Debug.WriteLine($"deleted {file}");
378389
Clear();
379390
}
380391

381392
};
393+
394+
Cb_Queue.Toggled += b =>
395+
{
396+
Btn_Queue.Enabled = !b;
397+
};
398+
399+
Btn_Queue.Clicked += () =>
400+
{
401+
if (IsQueryReady()) {
402+
403+
}
404+
};
405+
406+
Btn_Queue.Enabled = false;
382407

383408
Win.Add(Lbl_Input, Tf_Input, Btn_Run, Lbl_InputOk,
384409
Btn_Clear, Tv_Results, Pbr_Status, Lbl_InputInfo, Lbl_QueryUpload,
385410
Btn_Restart, Btn_Config, Lbl_InputInfo2, Btn_Cancel, Lbl_Status, Btn_Browse,
386-
Lbl_Status2, /*Btn_Queue,*/ Btn_Delete
411+
Lbl_Status2, Btn_Queue, Btn_Delete, Cb_Queue
387412
);
388413

389414
Top.Add(Win);
@@ -610,6 +635,9 @@ private async Task<bool> SetQuery(ustring text)
610635
IsReady.Set();
611636
Btn_Run.Enabled = false;
612637
Pbr_Status.Fraction = 0;
638+
// Btn_Delete.Enabled = true;
639+
640+
Tf_Input.ReadOnly = true;
613641

614642
return true;
615643
}
@@ -680,5 +708,6 @@ public void Dispose()
680708
Client.Dispose();
681709
Query.Dispose();
682710
m_token.Dispose();
711+
m_queue.Clear();
683712
}
684713
}

SmartImage 3/Program.cs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
using SmartImage.Mode.Shell;
1919
using SmartImage.Utilities;
2020
using Command = System.CommandLine.Command;
21+
using Microsoft.Extensions.Logging;
22+
using SmartImage.Lib.Utilities;
2123

2224
#pragma warning disable CS0168
2325

@@ -52,6 +54,8 @@ public static void Init()
5254

5355
}
5456

57+
private static readonly ILogger Logger = LogUtil.Factory.CreateLogger(nameof(SearchClient));
58+
5559
public static async Task<int> Main(string[] args)
5660
{
5761
// Console.OutputEncoding = Encoding.Unicode;
@@ -73,9 +77,15 @@ public static async Task<int> Main(string[] args)
7377
*/
7478
#endif
7579

80+
bool c = Global.IsCompatible;
81+
82+
if (!c) {
83+
Logger.LogCritical("{Lib} incompatible!", Global.LIB_NAME);
84+
}
85+
7686
bool cli = args is { } && args.Any();
7787

78-
if (cli&& args.Contains(R2.Arg_NoUI)) {
88+
if (cli && args.Contains(R2.Arg_NoUI)) {
7989
var main = new CliMode();
8090

8191
var rc = new RootCommand()
@@ -94,12 +104,11 @@ public static async Task<int> Main(string[] args)
94104

95105
};
96106

97-
foreach (Option option in options)
98-
{
107+
foreach (Option option in options) {
99108
rc.AddOption(option);
100109
}
101110

102-
rc.SetHandler(main.RunAsync, (Option<string>)options[0]);
111+
rc.SetHandler(main.RunAsync, (Option<string>) options[0]);
103112

104113
var i = await rc.InvokeAsync(args);
105114

SmartImage.Lib 3/SearchClient.cs

Lines changed: 3 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -90,72 +90,10 @@ static SearchClient()
9090
/// <param name="query">Search query</param>
9191
/// <param name="token">Cancellation token passed to <see cref="BaseSearchEngine.GetResultAsync"/></param>
9292
/// <param name="p"><see cref="IProgress{T}"/></param>
93-
public async Task<SearchResult[]> RunSearchAsync(SearchQuery[] query, CancellationToken? token = null,
94-
[CBN] IProgress<int> p = null)
95-
{
96-
if (!ConfigApplied) {
97-
await ApplyConfigAsync();
98-
}
99-
100-
token ??= CancellationToken.None;
101-
var tasks = query.SelectMany(e => GetSearchTasks(e, token.Value)).ToList();
102-
103-
var results = new SearchResult[tasks.Count];
104-
int i = 0;
105-
106-
while (tasks.Any()) {
107-
if (token.Value.IsCancellationRequested) {
108-
109-
Logger.LogWarning("Cancellation requested");
110-
IsComplete = true;
111-
112-
return results;
113-
}
114-
115-
var task = await Task.WhenAny(tasks);
116-
117-
var result = await task;
118-
119-
OnResult?.Invoke(this, result);
120-
p?.Report(i);
121-
122-
if (Config.PriorityEngines.HasFlag(result.Engine.EngineOption)) {
123-
124-
OpenResult(result);
125-
}
126-
127-
results[i] = result;
128-
i++;
129-
// results.Add(result);
130-
tasks.Remove(task);
131-
}
132-
133-
OnComplete?.Invoke(this, results);
134-
135-
IsComplete = true;
136-
137-
if (Config.PriorityEngines == SearchEngineOptions.Auto) {
138-
139-
// var sri = results.SelectMany(r => r.Results).ToArray();
140-
// var result = Optimize(sri).FirstOrDefault() ?? sri.FirstOrDefault();
141-
//todo
142-
OpenResult(results.FirstOrDefault());
143-
144-
}
145-
146-
return results;
147-
}
148-
149-
/// <summary>
150-
/// Runs a search of <paramref name="query"/>.
151-
/// </summary>
152-
/// <param name="query">Search query</param>
153-
/// <param name="token">Cancellation token passed to <see cref="BaseSearchEngine.GetResultAsync"/></param>
154-
/// <param name="p"><see cref="IProgress{T}"/></param>
155-
public Task<SearchResult[]> RunSearchAsync(SearchQuery query, CancellationToken? token = null,
93+
public async Task<SearchResult[]> RunSearchAsync(SearchQuery query, CancellationToken? token = null,
15694
[CBN] IProgress<int> p = null)
15795
{
158-
/*if (!ConfigApplied) {
96+
if (!ConfigApplied) {
15997
await ApplyConfigAsync();
16098
}
16199

@@ -206,9 +144,7 @@ public Task<SearchResult[]> RunSearchAsync(SearchQuery query, CancellationToken?
206144

207145
}
208146

209-
return results;*/
210-
211-
return RunSearchAsync(new SearchQuery[] { query }, token, p);
147+
return results;
212148
}
213149

214150
private void OpenResult(SearchResult result)

0 commit comments

Comments
 (0)