Skip to content

Commit

Permalink
modified: Cargo.lock
Browse files Browse the repository at this point in the history
	modified:   Cargo.toml
	modified:   src/app.rs
	modified:   src/histoer/histogram1d.rs
	modified:   src/histoer/histogram2d.rs
	modified:   src/histoer/histogrammer.rs
	modified:   src/lib.rs
	modified:   src/main.rs
	new file:   src/pane.rs
	modified:   src/processer.rs
	new file:   src/tree.rs
	modified:   src/workspacer.rs
  • Loading branch information
alconley committed May 1, 2024
1 parent 0cfd8b0 commit 9ebdc9f
Show file tree
Hide file tree
Showing 12 changed files with 829 additions and 639 deletions.
37 changes: 30 additions & 7 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ rust-version = "1.72"


[dependencies]
egui = "0.27.0"
eframe = { version = "0.27.0", default-features = false, features = [
egui = "0.27.2"
eframe = { version = "0.27.2", default-features = false, features = [
"default_fonts", # Embed the default egui fonts.
"glow", # Use the glow rendering backend. Alternative: "wgpu".
"persistence", # Enable restoring app state when restarting the app.
Expand All @@ -23,6 +23,7 @@ serde = { version = "1", features = ["derive"] }
env_logger = "0.10"

egui_plot = {version = "0.27.2", features = ["serde"] }
egui_tiles = "0.8.0"
polars = { version = "0.36", features = ["lazy", "parquet", "ndarray"] }
rfd = "0.13"
serde = { version = "1.0", features = ["derive"] }
Expand Down
209 changes: 159 additions & 50 deletions src/app.rs
Original file line number Diff line number Diff line change
@@ -1,81 +1,190 @@
use eframe::egui::{self};
use eframe::App;
use super::pane::Pane;
use super::tree::TreeBehavior;

use super::processer::Processer;
use super::workspacer::Workspacer;

#[derive(Default, serde::Deserialize, serde::Serialize)]
use egui_tiles::{TileId, Tiles};

Check failure on line 7 in src/app.rs

View workflow job for this annotation

GitHub Actions / Clippy

unused imports: `TileId`, `Tiles`

Check warning on line 7 in src/app.rs

View workflow job for this annotation

GitHub Actions / Check

unused imports: `TileId`, `Tiles`

Check warning on line 7 in src/app.rs

View workflow job for this annotation

GitHub Actions / Test Suite

unused imports: `TileId`, `Tiles`

#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
pub struct MUCApp {
tree: egui_tiles::Tree<Pane>,

workspacer: Workspacer,
processer: Processer,
window: bool,

#[cfg_attr(feature = "serde", serde(skip))]
behavior: TreeBehavior,
}

impl MUCApp {
pub fn new(_cc: &eframe::CreationContext<'_>, window: bool) -> Self {
impl Default for MUCApp {
fn default() -> Self {

let mut tiles = egui_tiles::Tiles::default();

let workspacer = Workspacer::new();
let processer = Processer::new();

let mut tabs = vec![];

Check failure on line 28 in src/app.rs

View workflow job for this annotation

GitHub Actions / Clippy

calls to `push` immediately after creation
tabs.push(tiles.insert_pane(Pane::Workspace(workspacer.clone())));

let root = tiles.insert_tab_tile(tabs);

let tree = egui_tiles::Tree::new("my_tree", root, tiles);

Self {
workspacer: Workspacer::new(),
processer: Processer::new(),
window,
tree,
workspacer,
processer,
behavior: Default::default(),
}
}
}

fn ui(&mut self, ui: &mut egui::Ui) {
egui::TopBottomPanel::top("plotter_top_panel").show_inside(ui, |ui| {
egui::menu::bar(ui, |ui| {
ui.menu_button("Workspace", |ui| {
self.workspacer.workspace_ui(ui);
});
impl MUCApp {
pub fn new() -> Self {
Default::default()
}

pub fn ui(&mut self, ui: &mut egui::Ui) {
self.tree.ui(&mut self.behavior, ui);
}

pub fn add_histograms_to_tree(&mut self) {

if !self.workspacer.selected_files.is_empty() {
self.processer.files = self.workspacer.selected_files.clone();
self.processer.calculation_ui(ui);
// ui.separator();
let mut panes = self.processer.histogrammer.get_histogram1d_panes();

panes.push(Pane::Workspace(self.workspacer.clone()));

let tree = egui_tiles::Tree::new_grid("histograms", panes);

self.tree = tree;

// let tabs: Vec<TileId> = vec![tiles.insert_pane(Pane { }), tiles.insert_pane(Pane { })];

// self.tree.tiles.insert_container(container);


}

}

// if ui.button("Calculate histograms").clicked() {
// // add selected files to processer
// self.processer.files = self.workspacer.selected_files.clone();
// info!("Calculating histograms");
impl eframe::App for MUCApp {
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {

// self.processer.calculate_histograms();
// info!("Finished caluclating histograms");
// }
egui::TopBottomPanel::top("muc_top_panel").show(ctx, |ui| {
egui::menu::bar(ui, |ui| {
if !self.workspacer.selected_files.borrow().is_empty() {
// Properly clone the shared state for processing
self.processer.files = self.workspacer.selected_files.borrow().clone();
// self.processer.calculation_ui(ui);

// ui.separator();
if ui.button("Calculate Histograms").clicked() {
self.processer.calculate_histograms();
self.add_histograms_to_tree();
}
}
});
});

egui::SidePanel::right("plotter_right_panel").show_inside(ui, |ui| {
self.processer.select_histograms_ui(ui);
});
egui::SidePanel::left("tree").show(ctx, |ui| {
if ui.button("Reset").clicked() {
*self = Default::default();
}
self.behavior.ui(ui);

if self.workspacer.file_selecton {
egui::SidePanel::left("plotter_left_panel").show_inside(ui, |ui| {
self.workspacer.file_selection_ui_side_panel(ui);
ui.separator();

ui.collapsing("Tree", |ui| {
ui.style_mut().wrap = Some(false);
let tree_debug = format!("{:#?}", self.tree);
ui.monospace(&tree_debug);
});
}

egui::CentralPanel::default().show_inside(ui, |ui| {
self.processer.render_histos(ui);
ui.separator();

ui.collapsing("Active tiles", |ui| {
let active = self.tree.active_tiles();
for tile_id in active {
use egui_tiles::Behavior as _;
let name = self.behavior.tab_title_for_tile(&self.tree.tiles, tile_id);
ui.label(format!("{} - {tile_id:?}", name.text()));
}
});

ui.separator();

if let Some(root) = self.tree.root() {
tree_ui(ui, &mut self.behavior, &mut self.tree.tiles, root);
}

});

egui::CentralPanel::default().show(ctx, |ui| {
self.tree.ui(&mut self.behavior, ui);
});

}

fn save(&mut self, _storage: &mut dyn eframe::Storage) {
#[cfg(feature = "serde")]
eframe::set_value(_storage, eframe::APP_KEY, &self);
}
}

impl App for MUCApp {
fn update(&mut self, ctx: &eframe::egui::Context, _frame: &mut eframe::Frame) {
if self.window {
let mut size = ctx.screen_rect().size();
size.x -= 50.0; // Subtract 50 from the width
size.y -= 100.0; // Subtract 50 from the height
fn tree_ui(
ui: &mut egui::Ui,
behavior: &mut dyn egui_tiles::Behavior<Pane>,
tiles: &mut egui_tiles::Tiles<Pane>,
tile_id: egui_tiles::TileId,
) {
// Get the name BEFORE we remove the tile below!
let text = format!(
"{} - {tile_id:?}",
behavior.tab_title_for_tile(tiles, tile_id).text()
);

egui::Window::new("Plotter").max_size(size).show(ctx, |ui| {
self.ui(ui);
});
} else {
egui::CentralPanel::default().show(ctx, |ui| {
self.ui(ui);
});
// Temporarily remove the tile to circumvent the borrowchecker
let Some(mut tile) = tiles.remove(tile_id) else {
log::debug!("Missing tile {tile_id:?}");
return;
};

let default_open = false;
egui::collapsing_header::CollapsingState::load_with_default_open(
ui.ctx(),
egui::Id::new((tile_id, "tree")),
default_open,
)
.show_header(ui, |ui| {
ui.label(text);
let mut visible = tiles.is_visible(tile_id);
ui.checkbox(&mut visible, "Visible");
tiles.set_visible(tile_id, visible);
})
.body(|ui| match &mut tile {
egui_tiles::Tile::Pane(_) => {}
egui_tiles::Tile::Container(container) => {
let mut kind = container.kind();
egui::ComboBox::from_label("Kind")
.selected_text(format!("{kind:?}"))
.show_ui(ui, |ui| {
for typ in egui_tiles::ContainerKind::ALL {
ui.selectable_value(&mut kind, typ, format!("{typ:?}"))
.clicked();
}
});
if kind != container.kind() {
container.set_kind(kind);
}

for &child in container.children() {
tree_ui(ui, behavior, tiles, child);
}
}
}
});

// Put the tile back
tiles.insert(tile_id, tile);
}

Loading

0 comments on commit 9ebdc9f

Please sign in to comment.