Page buttons
This commit is contained in:
73
src/app.rs
73
src/app.rs
@@ -1,4 +1,5 @@
|
||||
use crate::types;
|
||||
use crate::util::clamp;
|
||||
use eframe::egui;
|
||||
use tokio::sync::mpsc;
|
||||
|
||||
@@ -24,6 +25,7 @@ impl Application {
|
||||
fn render_top(&mut self, ctx: &egui::Context) {
|
||||
egui::TopBottomPanel::top("top_panel").show(ctx, |ui| {
|
||||
ui.horizontal(|ui| {
|
||||
// Side panel toggle
|
||||
let mut side_panel_btn_text = ">>";
|
||||
if self.show_side_panel {
|
||||
side_panel_btn_text = "<<";
|
||||
@@ -31,7 +33,6 @@ impl Application {
|
||||
if ui.button(side_panel_btn_text).clicked() {
|
||||
self.show_side_panel = !self.show_side_panel;
|
||||
}
|
||||
|
||||
ui.separator();
|
||||
|
||||
// Search button and input
|
||||
@@ -61,6 +62,57 @@ impl Application {
|
||||
}
|
||||
ui.separator();
|
||||
|
||||
ui.label(format!(
|
||||
"Page {} of {}",
|
||||
self.search_ctx.page, self.search_ctx.total_pages
|
||||
));
|
||||
if ui.button(" - ").clicked() {
|
||||
self.search_ctx.page =
|
||||
clamp(self.search_ctx.page - 1, 1, self.search_ctx.total_pages);
|
||||
let query = self.query.clone();
|
||||
let url = self.server_url.clone();
|
||||
let page = self.search_ctx.page.clone();
|
||||
let page_size = self.search_ctx.per_page.clone();
|
||||
let (tx, rx) = mpsc::channel::<
|
||||
Result<(Vec<types::FileEntry>, types::Metadata), String>,
|
||||
>(1);
|
||||
self.search_ctx.search_rx = Some(rx);
|
||||
self.search_ctx.is_searching = true;
|
||||
self.search_ctx.search_results.clear();
|
||||
self.search_ctx.page = 0;
|
||||
self.search_ctx.total_pages = 0;
|
||||
self.search_ctx.total_results = 0;
|
||||
self.status = "Searching...".to_string();
|
||||
tokio::spawn(async move {
|
||||
let res = search_files(url, query, page, page_size).await;
|
||||
let _ = tx.send(res).await;
|
||||
});
|
||||
ctx.forget_all_images();
|
||||
}
|
||||
|
||||
if ui.button("+").clicked() {
|
||||
self.search_ctx.page =
|
||||
clamp(self.search_ctx.page + 1, 1, self.search_ctx.total_pages);
|
||||
let query = self.query.clone();
|
||||
let url = self.server_url.clone();
|
||||
let page = self.search_ctx.page.clone();
|
||||
let page_size = self.search_ctx.per_page.clone();
|
||||
let (tx, rx) = mpsc::channel::<
|
||||
Result<(Vec<types::FileEntry>, types::Metadata), String>,
|
||||
>(1);
|
||||
self.search_ctx.search_rx = Some(rx);
|
||||
self.search_ctx.is_searching = true;
|
||||
self.search_ctx.search_results.clear();
|
||||
self.search_ctx.page = 0;
|
||||
self.search_ctx.total_pages = 0;
|
||||
self.search_ctx.total_results = 0;
|
||||
self.status = "Searching...".to_string();
|
||||
tokio::spawn(async move {
|
||||
let res = search_files(url, query, page, page_size).await;
|
||||
let _ = tx.send(res).await;
|
||||
});
|
||||
}
|
||||
|
||||
ui.label(&self.status);
|
||||
});
|
||||
});
|
||||
@@ -81,6 +133,23 @@ impl Application {
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
ui.horizontal(|ui| {
|
||||
// Page controls
|
||||
ui.label(format!("Items per page: {}", self.search_ctx.per_page));
|
||||
if ui.button(" - ").clicked() {
|
||||
self.search_ctx.per_page = self.search_ctx.per_page.saturating_sub(1);
|
||||
self.search_ctx.total_pages =
|
||||
self.search_ctx.total_results / self.search_ctx.per_page;
|
||||
ctx.forget_all_images();
|
||||
}
|
||||
if ui.button("+").clicked() {
|
||||
self.search_ctx.per_page = self.search_ctx.per_page.saturating_add(1);
|
||||
self.search_ctx.total_pages =
|
||||
self.search_ctx.total_results / self.search_ctx.per_page;
|
||||
ctx.forget_all_images();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@@ -143,7 +212,7 @@ impl eframe::App for Application {
|
||||
self.render_side_panel(ctx);
|
||||
}
|
||||
egui::CentralPanel::default().show(ctx, |ui| {
|
||||
ui.heading("Hello world");
|
||||
ui.heading("// TODO: Put shit here");
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
mod app;
|
||||
mod types;
|
||||
mod util;
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
|
||||
9
src/util.rs
Normal file
9
src/util.rs
Normal file
@@ -0,0 +1,9 @@
|
||||
pub fn clamp(val: usize, min: usize, max: usize) -> usize {
|
||||
if val < min {
|
||||
min
|
||||
} else if val > max {
|
||||
max
|
||||
} else {
|
||||
val
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user