better example

This commit is contained in:
Priec
2025-08-02 10:45:21 +02:00
parent 2b08e64db8
commit 8c8ba53668
5 changed files with 709 additions and 5 deletions

View File

@@ -5,7 +5,7 @@
use ratatui::{
layout::{Alignment, Rect},
style::{Modifier, Style},
widgets::{Block, Borders, List, ListItem, ListState, Paragraph},
widgets::{Block, List, ListItem, ListState, Paragraph}, // Removed Borders
Frame,
};
@@ -27,7 +27,7 @@ pub fn render_autocomplete_dropdown<T: CanvasTheme, D: DataProvider>(
editor: &FormEditor<D>,
) {
let ui_state = editor.ui_state();
if !ui_state.is_autocomplete_active() {
return;
}
@@ -76,7 +76,7 @@ fn render_suggestions_dropdown<T: CanvasTheme>(
frame_area: Rect,
input_rect: Rect,
theme: &T,
suggestions: &[SuggestionItem<String>],
suggestions: &[SuggestionItem], // Fixed: Removed <String> generic parameter
selected_index: Option<usize>,
) {
let display_texts: Vec<&str> = suggestions

View File

@@ -11,7 +11,7 @@ use ratatui::{
};
#[cfg(feature = "gui")]
use crate::canvas::theme::CanvasTheme;
use crate::canvas::theme::{CanvasTheme, DefaultCanvasTheme};
use crate::canvas::modes::HighlightState;
use crate::data_provider::DataProvider;
use crate::editor::FormEditor;
@@ -353,3 +353,14 @@ fn set_cursor_position(
let cursor_y = field_rect.y;
f.set_cursor_position((cursor_x, cursor_y));
}
/// Set default theme if custom not specified
#[cfg(feature = "gui")]
pub fn render_canvas_default<D: DataProvider>(
f: &mut Frame,
area: Rect,
editor: &FormEditor<D>,
) -> Option<Rect> {
let theme = DefaultCanvasTheme::default();
render_canvas(f, area, editor, &theme)
}

View File

@@ -15,3 +15,36 @@ pub trait CanvasTheme {
fn highlight_bg(&self) -> Color;
fn warning(&self) -> Color;
}
#[cfg(feature = "gui")]
#[derive(Debug, Clone, Default)]
pub struct DefaultCanvasTheme;
#[cfg(feature = "gui")]
impl CanvasTheme for DefaultCanvasTheme {
fn bg(&self) -> Color {
Color::Black
}
fn fg(&self) -> Color {
Color::White
}
fn border(&self) -> Color {
Color::DarkGray
}
fn accent(&self) -> Color {
Color::Cyan
}
fn secondary(&self) -> Color {
Color::Gray
}
fn highlight(&self) -> Color {
Color::Yellow
}
fn highlight_bg(&self) -> Color {
Color::Blue
}
fn warning(&self) -> Color {
Color::Red
}
}

View File

@@ -25,10 +25,13 @@ pub use canvas::actions::{CanvasAction, ActionResult};
// Theming and GUI
#[cfg(feature = "gui")]
pub use canvas::theme::CanvasTheme;
pub use canvas::theme::{CanvasTheme, DefaultCanvasTheme};
#[cfg(feature = "gui")]
pub use canvas::gui::render_canvas;
#[cfg(feature = "gui")]
pub use canvas::gui::render_canvas_default;
#[cfg(all(feature = "gui", feature = "autocomplete"))]
pub use autocomplete::gui::render_autocomplete_dropdown;