Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/gui/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ pub use tempfile_dialog::TempfileDialog;
pub use timer_dialog::{TimerCompletionDialog, TimerDialog};
pub use toast_log_dialog::ToastLogDialog;
pub use todo_dialog::TodoDialog;
pub use todo_view_dialog::TodoViewDialog;
pub use todo_view_dialog::{todo_view_layout_sizes, todo_view_window_constraints, TodoViewDialog};
pub use unused_assets_dialog::UnusedAssetsDialog;
pub use volume_dialog::VolumeDialog;

Expand Down
40 changes: 34 additions & 6 deletions src/gui/todo_view_dialog.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,17 @@ use crate::gui::LauncherApp;
use crate::plugins::todo::{load_todos, save_todos, TodoEntry, TODO_FILE};
use eframe::egui;

const TODO_VIEW_SIZE: egui::Vec2 = egui::vec2(360.0, 260.0);
const TODO_VIEW_LIST_HEIGHT: f32 = 170.0;

pub fn todo_view_layout_sizes() -> (egui::Vec2, f32) {
(TODO_VIEW_SIZE, TODO_VIEW_LIST_HEIGHT)
}

pub fn todo_view_window_constraints() -> (egui::Vec2, egui::Vec2) {
(TODO_VIEW_SIZE, TODO_VIEW_SIZE)
}

#[derive(Default)]
pub struct TodoViewDialog {
pub open: bool,
Expand Down Expand Up @@ -51,14 +62,16 @@ impl TodoViewDialog {
if !self.open {
return;
}
let (window_size, list_height) = todo_view_layout_sizes();
let (min_size, max_size) = todo_view_window_constraints();
let mut close = false;
let mut save_now = false;
egui::Window::new("View Todos")
.open(&mut self.open)
.resizable(true)
.default_size((320.0, 240.0))
.min_width(200.0)
.min_height(150.0)
.resizable(false)
.default_size(window_size)
.min_size(min_size)
.max_size(max_size)
.show(ctx, |ui| {
ui.horizontal(|ui| {
ui.checkbox(&mut self.sort_by_priority, "Sort by priority");
Expand Down Expand Up @@ -88,11 +101,10 @@ impl TodoViewDialog {
indices
.sort_by(|a, b| self.entries[*b].priority.cmp(&self.entries[*a].priority));
}
let area_height = ui.available_height();
// Keep horizontal overflow for long todo text without wrapping.
egui::ScrollArea::both()
.auto_shrink([false, false])
.max_height(area_height)
.max_height(list_height)
.show(ui, |ui| {
for idx in indices {
if Some(idx) == self.editing_idx {
Expand Down Expand Up @@ -184,3 +196,19 @@ impl TodoViewDialog {
}
}
}

#[cfg(test)]
mod tests {
use super::*;

#[test]
fn todo_view_layout_sizes_constants() {
let (window_size, list_height) = todo_view_layout_sizes();
let (min_size, max_size) = todo_view_window_constraints();
assert_eq!(window_size, TODO_VIEW_SIZE);
assert_eq!(list_height, TODO_VIEW_LIST_HEIGHT);
assert_eq!(min_size, max_size);
assert_eq!(window_size, min_size);
assert!(list_height < window_size.y);
}
}
32 changes: 31 additions & 1 deletion tests/todo_plugin.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
use eframe::egui;
use multi_launcher::gui::{LauncherApp, TodoDialog};
use multi_launcher::gui::{
todo_view_layout_sizes, todo_view_window_constraints, LauncherApp, TodoDialog, TodoViewDialog,
};
use multi_launcher::plugin::Plugin;
use multi_launcher::plugin::PluginManager;
use multi_launcher::plugins::todo::{
Expand Down Expand Up @@ -419,3 +421,31 @@ fn dialog_scrolls_with_many_entries() {
.expect("window rect");
assert!(rect.height() < 800.0);
}

#[test]
fn todo_view_dialog_has_fixed_size() {
let _lock = TEST_MUTEX.lock().unwrap();
let dir = tempdir().unwrap();
std::env::set_current_dir(dir.path()).unwrap();
let ctx = egui::Context::default();
let mut app = new_app(&ctx);
let mut dlg = TodoViewDialog::default();
dlg.open();

ctx.begin_frame(egui::RawInput {
screen_rect: Some(egui::Rect::from_min_size(
egui::Pos2::ZERO,
egui::vec2(1000.0, 2000.0),
)),
..Default::default()
});
dlg.ui(&ctx, &mut app);
let _ = ctx.end_frame();

let (min_size, max_size) = todo_view_window_constraints();
let _rect = ctx
.memory(|m| m.area_rect(egui::Id::new("View Todos")))
.expect("window rect");
let (_window_size, _) = todo_view_layout_sizes();
assert_eq!(min_size, max_size);
}