start to clean up vibecode

This commit is contained in:
2025-12-11 19:32:38 +01:00
parent 60c2c288c5
commit 3d3ca9a81b
6 changed files with 527 additions and 465 deletions
+152
View File
@@ -0,0 +1,152 @@
use eframe::egui;
use crate::file_tab::FileTab;
use crate::theme;
use crate::theme::ColorPalette;
use crate::types::HighlightRule;
use crate::ui::{render_log_view, LogViewContext};
pub fn render_filter_panel(tab: &mut FileTab, ctx: &egui::Context, highlight_rules: &Vec<HighlightRule>, export_clicked: &mut bool){
if !tab.filtered_lines.is_empty() {
let palette = theme::get_palette();
egui::TopBottomPanel::bottom("filtered_view")
.resizable(true)
.default_height(250.0)
.min_height(150.0)
.show(ctx, |ui| {
// Styled header
render_filter_panel_header(ui, &palette, tab, export_clicked);
ui.separator();
render_log_view(
ui,
LogViewContext {
tab,
highlight_rules,
show_all: false,
},
);
});
}
}
pub fn render_main_log_panel(ctx: &egui::Context, highlight_rules: &Vec<HighlightRule>, active_tab: Option<&mut FileTab>) {
egui::CentralPanel::default().show(ctx, |ui| {
let palette = theme::get_palette();
if let Some(tab) = active_tab {
// Styled header
render_file_header(ui, palette, tab);
ui.separator();
render_log_view(
ui,
LogViewContext {
tab,
highlight_rules: &highlight_rules,
show_all: true,
},
);
} else {
render_no_file_opened_view(ui, palette);
}
});
}
fn render_filter_panel_header(ui: &mut egui::Ui, palette: &ColorPalette, tab: &FileTab, export_clicked: &mut bool){
let header_frame = egui::Frame::none()
.fill(palette.bg_secondary)
.inner_margin(egui::Margin::symmetric(12.0, 8.0));
header_frame.show(ui, |ui| {
ui.horizontal(|ui| {
let icon = egui::RichText::new("🔍")
.size(16.0);
ui.label(icon);
let title = egui::RichText::new("Search Results")
.size(16.0)
.color(palette.text_primary)
.strong();
ui.label(title);
let count = egui::RichText::new(format!("({} matches)", tab.filtered_lines.len()))
.size(14.0)
.color(palette.accent_bright);
ui.label(count);
ui.add_space(16.0);
// Export button
if ui.button("📤 Export").clicked() {
*export_clicked = true;
}
});
});
}
fn render_file_header(ui: &mut egui::Ui, palette: ColorPalette, tab: &FileTab) {
let header_frame = egui::Frame::none()
.fill(palette.bg_secondary)
.inner_margin(egui::Margin::symmetric(12.0, 8.0));
header_frame.show(ui, |ui| {
ui.horizontal(|ui| {
let icon = egui::RichText::new("📄")
.size(16.0);
ui.label(icon);
let title = egui::RichText::new("Log View")
.size(16.0)
.color(palette.text_primary)
.strong();
ui.label(title);
// Show filename
if let Some(filename) = tab.file_path.file_name() {
ui.add_space(8.0);
let filename_text = egui::RichText::new(format!("{}", filename.to_string_lossy()))
.size(14.0)
.color(palette.text_secondary);
ui.label(filename_text);
}
// Show line count
ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| {
let line_count = egui::RichText::new(format!("{} lines", tab.line_index.total_lines))
.size(13.0)
.color(palette.text_muted);
ui.label(line_count);
});
});
});
}
fn render_no_file_opened_view(ui: &mut egui::Ui, palette: ColorPalette) {
ui.centered_and_justified(|ui| {
ui.vertical_centered(|ui| {
ui.add_space(40.0);
let icon = egui::RichText::new("📂")
.size(48.0);
ui.label(icon);
ui.add_space(16.0);
let text = egui::RichText::new("No file loaded")
.size(18.0)
.color(palette.text_secondary);
ui.label(text);
ui.add_space(8.0);
let hint = egui::RichText::new("Click 'Open File' in the menu to get started")
.size(14.0)
.color(palette.text_muted);
ui.label(hint);
});
});
}