@@ -84,16 +84,16 @@ static SearchCommand() { }
8484
8585 public SearchCommand ( )
8686 {
87- m_cts = new CancellationTokenSource ( ) ;
88- m_ctsRun = new CancellationTokenSource ( ) ;
87+ m_cts = new CancellationTokenSource ( ) ;
88+ m_ctsRun = new CancellationTokenSource ( ) ;
8989 m_ctsRunSearch = new CancellationTokenSource ( ) ;
9090
9191 // m_results = new();
9292 m_resultTables = new ConcurrentDictionary < SearchResult , SpcTable > ( ) ;
9393 m_previewCanvasCache = new MemoryCache ( "Buf" ) ;
9494
9595 // m_prompts = new ConcurrentDictionary<SearchResult, SelectionPrompt<SearchResultItem>>();
96- Query = SearchQuery . Null ;
96+ Query = SearchQuery . Null ;
9797 }
9898
9999#region
@@ -171,7 +171,7 @@ public override async Task<int> ExecuteAsync(CommandContext context, SearchComma
171171 ) ;
172172
173173 // AnsiConsole.Write(m_layout);
174-
174+
175175 try {
176176
177177 IRenderable elem = CommandSettings . Interactive ? m_layout : m_mainTable ;
@@ -223,7 +223,7 @@ private async Task RunSearchLiveAsync(LiveDisplayContext c, CancellationToken ct
223223#if UNITTEST
224224 return ;
225225#endif
226-
226+
227227 var search = Client . RunSearchAsync ( Query , token : ct ) ;
228228
229229 while ( ! ct . IsCancellationRequested && await Client . ResultChannel . Reader . WaitToReadAsync ( ct ) ) {
@@ -336,8 +336,8 @@ await AnsiConsole.Live(srTable).StartAsync(async (f) =>
336336 SearchResultItem scnItm = sri . ScannedItems [ i ] ;
337337 scnItm . CalculateSimilarity ( Query . Source ) ;
338338
339- // var scnRow = scnItm.GetItemRow(sel.ItemIdx, i);
340- // srTable.InsertRow(selIdx + i + 1, scnRow);
339+ var scnRow = scnItm . GetItemRow ( sel . ItemIdx , i ) ;
340+ srTable . InsertRow ( selIdx + i + 1 , scnRow ) ;
341341 }
342342
343343 // m_prompts[sr].AddChoiceGroup(sri, sri.ScannedItems);
@@ -451,24 +451,52 @@ private CanvasImage GetPreview(SearchResultItem sri)
451451 return ci ;
452452 }
453453
454+
455+ private const ConsoleKey PREV_KEY_RESIZE_INTERNAL = ConsoleKey . S ;
456+ private const ConsoleKey PREV_KEY_MAXWIDTH_BUFWIDTH = ConsoleKey . M ;
457+ private const ConsoleKey PREV_KEY_RESIZE_SCALE = ConsoleKey . R ;
458+ private const ConsoleKey PREV_KEY_EXIT = ConsoleKey . Escape ;
459+
460+ private static readonly Dictionary < ConsoleKey , string > _keyDescriptions = new ( )
461+ {
462+ { PREV_KEY_RESIZE_INTERNAL , "Resize (internal)" } ,
463+ { PREV_KEY_RESIZE_SCALE , "Resize (scale)" } ,
464+ { PREV_KEY_MAXWIDTH_BUFWIDTH , "Set max preview width to buffer width" } ,
465+ { PREV_KEY_EXIT , "Exit preview" } ,
466+ } ;
467+
468+ private static readonly string _descRow =
469+ _keyDescriptions . Aggregate ( String . Empty , ( s , kv ) => { return s + Markup . Escape ( ( $ "[{ kv . Key } ] : { kv . Value } ") ) + " | " ; } ) ;
470+
471+
454472 private void ShowPreview ( CanvasImage ci , SearchResultItem sri )
455473 {
456474 var ( w , h ) = ( AnsiConsole . Profile . Width , AC . Profile . Height ) ;
457475
458- var pnl = new Panel ( ci ) { Expand = true , Border = BoxBorder . None , Header = new PanelHeader ( $ "{ sri . Value } ") } ;
459- /*var sriLayout = new Layout("Info");
476+ var pnl = new Panel ( ci )
477+ {
478+ Expand = true ,
479+ Border = BoxBorder . None ,
480+ Header = new PanelHeader ( $ "{ sri . Value } ") ,
481+ } ;
482+
483+ var sriLayout = new Layout ( "Preview" ) ;
460484
461- sriLayout.SplitColumns (
462- new Layout("Metadata") ,
463- new Layout("Image")
485+ sriLayout . SplitRows (
486+ new Layout ( "Image" ) { Ratio = 2 } ,
487+ new Layout ( "Details" ) { Size = 2 }
464488 ) ;
465489
490+ // var grid = sri.GetItemInfoGrid();
491+ var infoGrid = new Grid ( ) { Expand = false , } ;
492+ infoGrid . AddColumns ( 2 ) ;
493+ infoGrid . AddRow ( [ "Keys" , _descRow ] ) ;
494+ infoGrid . AddRow ( [ "Metadata" , sri . ToString ( ) ] ) ;
466495
467- var grid = sri.GetInfoGrid();
468- sriLayout["Metadata"].Update(grid);
469- sriLayout["Image"].Update(ci);*/
496+ sriLayout [ "Image" ] . Update ( pnl ) ;
497+ sriLayout [ "Details" ] . Update ( infoGrid ) ;
470498
471- AnsiConsole . Live ( pnl ) . Start ( ldc =>
499+ AnsiConsole . Live ( sriLayout ) . Start ( ldc =>
472500 {
473501 while ( true ) {
474502 // ci.MaxWidth = mw < 0 ? null : mw;
@@ -482,15 +510,15 @@ private void ShowPreview(CanvasImage ci, SearchResultItem sri)
482510 switch ( cki . Value . Key ) {
483511
484512
485- case ConsoleKey . S :
513+ case PREV_KEY_RESIZE_INTERNAL :
486514 ci . Mutate ( act => { act . Resize ( sri . Image . Width , sri . Image . Height ) ; } ) ;
487515 break ;
488516
489- case ConsoleKey . M :
517+ case PREV_KEY_MAXWIDTH_BUFWIDTH :
490518 ci . MaxWidth = w ;
491519 break ;
492520
493- case ConsoleKey . R :
521+ case PREV_KEY_RESIZE_SCALE :
494522 ci . Mutate ( act =>
495523 {
496524 var cs = act . GetCurrentSize ( ) ;
@@ -502,15 +530,14 @@ private void ShowPreview(CanvasImage ci, SearchResultItem sri)
502530 ci . MaxWidth = null ;
503531 continue ;
504532
505- case ConsoleKey . Escape :
533+ case PREV_KEY_EXIT :
506534 return ;
507535
508536 }
509537 }
510538 } ) ;
511539
512540
513- return ;
514541 }
515542
516543#endregion
0 commit comments