use std::sync::{Arc, OnceLock};
use eframe::egui::{self, mutex::RwLock, vec2, Button, Color32, Label, Sense, Stroke, TextEdit};
use egui_flex::{item, Flex};
use crate::tabs::lectures::{get_lectures, lec_name};
use super::{act_hours, act_lec, add_act, filtered_lectures};
pub fn show_lectures() -> &'static Arc<RwLock<bool>> {
static ACT_LEC: OnceLock<Arc<RwLock<bool>>> = OnceLock::new();
ACT_LEC.get_or_init(|| Arc::new(RwLock::new(false)))
}
pub fn set_lecture_filter() {
std::thread::spawn(move || {
let f = &*lec_name().read();
let f = &*f
.replace('i', "İ")
.to_uppercase();
let lecs = get_lectures()
.read()
.clone()
.into_iter()
.filter(|l| l.1.name.replace('i', "İ").to_uppercase().contains(&f));
*filtered_lectures().write() = lecs.map(|l| l.1).collect();
});
}
pub fn select_lecture_ui(ui: &mut egui::Ui) {
egui::Window::new("Lectures Ui")
.open(&mut *show_lectures().write())
.show(ui.ctx(), |ui| {
ui.label("Ders Seçin");
if ui
.add(TextEdit::singleline(&mut *lec_name().write()).hint_text("Dersleri Filtrele"))
.changed()
{
set_lecture_filter();
};
ui.add_space(5.);
ui.layout().with_main_wrap(true);
Flex::horizontal()
.wrap(true)
.align_items(egui_flex::FlexAlign::Start)
.width_percent(0.3)
.show(ui, |flex| {
for lec in &filtered_lectures().read()[..] {
let sel_lec = act_lec();
let mut color = Color32::GRAY;
let mut stroke = 0.3;
if let Some(l) = &*sel_lec.read() {
if &l.id == &lec.id {
color = Color32::BLUE;
stroke = 1.0;
}
}
let frame = egui::Frame::default()
.stroke(Stroke::new(stroke, color))
.rounding(5.)
.inner_margin(5.);
if flex
.add_widget(
item().frame(frame),
Label::new(&lec.name).sense(Sense::click()),
)
.inner
.on_hover_cursor(egui::CursorIcon::PointingHand)
.clicked()
{
let lec = lec.clone();
std::thread::spawn(move || {
let lec_clone = Arc::clone(sel_lec);
*lec_clone.write() = Some(lec.clone());
});
}
}
});
ui.add_sized(
vec2(500., 30.),
TextEdit::singleline(&mut *act_hours().write()).hint_text("Ders bloklarını gir"),
);
if ui.add_sized(vec2(500., 30.), Button::new("Ekle")).clicked() {
add_act();
};
});
}