Extensiones de interfaz y vista previa
Este capítulo describe las interfaces de Lertaro.PluginSdk para ampliar la barra lateral principal, añadir columnas de datos personalizadas, incorporar pestañas dinámicas en el Panel rápido, implementar vistas previas en QuickLook, extraer miniaturas y crear temas WPF o paquetes de localización.
1. Proveedor de filtros de la barra lateral ISidebarFilterProvider
Inserta árboles de filtros por categoría en la barra lateral izquierda de la ventana principal:
namespace Lertaro.PluginSdk;
public interface ISidebarFilterProvider : IPluginComponent
{
IEnumerable<SidebarFilterGroup> GetFilterGroups();
}
public sealed class SidebarFilterGroup
{
public required string GroupName { get; init; }
public required IReadOnlyList<SidebarFilterItem> FilterItems { get; init; }
}
public sealed class SidebarFilterItem
{
public required string Id { get; init; }
public required string DisplayName { get; init; }
public ImageSource? Icon { get; init; }
public required Func<ISearchResult, bool> FilterFunc { get; init; } // Delegado de coincidencia
}SidebarFilterGroup.Id es un identificador de grupo estable y opcional. El anfitrión puede aplicar comportamientos integrados a identificadores reconocidos como Type; déjalo vacío cuando el grupo sea completamente propio del plugin.
2. Proveedor de columnas personalizadas IResultColumnProvider
Añade columnas de datos adicionales a la vista de tabla "Detalles" de la ventana principal (p. ej. duración multimedia, líneas de código o ramas Git):
public interface IResultColumnProvider : IPluginComponent
{
string ColumnId { get; }
string HeaderText { get; }
double DefaultWidth => 120;
double MinWidth => 40;
bool IsVisibleByDefault => false;
string? GetCellText(ISearchResult result);
int Compare(ISearchResult a, ISearchResult b) => 0; // Comparador de ordenación al hacer clic en la cabecera
}3. Proveedor de pestañas del Panel rápido IQuickPanelTabProvider
Aporta pestañas de trabajo dinámicas al Panel rápido bajo la barra de búsqueda rápida:
public interface IQuickPanelTabProvider : IPluginComponent
{
string TabId { get; }
string Title { get; }
string? IconPath => null;
Task<IReadOnlyList<ISearchResult>> GetItemsAsync(CancellationToken token);
// Lógica de recepción de arrastrar y soltar
bool CanHandleDragOver(IDataObject data) => false;
Task HandleDropAsync(IDataObject data, CancellationToken token) => Task.CompletedTask;
// Soporte para reordenación mediante arrastre
bool SupportsReorder => false;
Task SaveOrderAsync(IReadOnlyList<ISearchResult> orderedItems) => Task.CompletedTask;
// Contexto de acciones exclusivo para la pestaña
DynamicActionContext CreateActionContext() => DynamicActionContext.Default;
}4. Vista previa de archivos y miniaturas
Proveedor de vista previa personalizada IFilePreviewProvider
Personaliza la representación visual de tipos de archivo específicos dentro de la ventana de QuickLook (Barra espaciadora):
public interface IFilePreviewProvider : IPluginComponent
{
bool CanPreview(string filePath);
int Priority => 0; // Prioridad en caso de conflicto entre plugins
FrameworkElement CreatePreviewControl(string filePath);
}Contratos de ciclo de vida y reutilización de vistas previas
Si el control WPF FrameworkElement implementa las siguientes interfaces opcionales, el anfitrión optimiza el ciclo de vida:
IPreviewSessionAware: Implementavoid OnPreviewClosed(), disparado al cerrar la vista previa o cambiar a un archivo no compatible, permitiendo liberar reproductores, instancias de WebView2 o flujos de archivo.IReusablePreview: Implementavoid UpdatePreview(string filePath). Al navegar entre archivos similares con las teclas de flecha, el anfitrión actualiza el contenido directamente sin recrear el control, evitando parpadeos.
Proveedor de miniaturas personalizadas IThumbnailProvider
Extrae miniaturas de alta resolución para formatos sin soporte nativo en el Shell (p. ej. .blend, .psd, .dwg):
public interface IThumbnailProvider : IPluginComponent
{
bool CanProvide(string filePath);
Task<ImageSource?> GetThumbnailAsync(string filePath, int targetSize, CancellationToken token);
}5. Temas y localización
Proveedor de temas IThemeProvider
Aporta esquemas de color y diccionarios de recursos WPF personalizados:
public interface IThemeProvider : IPluginComponent
{
string ThemeId { get; }
string DisplayName { get; }
ResourceDictionary GetResourceDictionary(bool isDark);
}Proveedor de localización ITranslationProvider
Aporta diccionarios de traducción multilingüe dinámicos:
public interface ITranslationProvider : IPluginComponent
{
IReadOnlyDictionary<string, string> GetTranslations(string cultureName);
}