start to clean up vibecode
This commit is contained in:
@@ -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);
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user