#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release
pub mod fonts;
pub mod tabs;
use eframe::egui;
use eframe::egui::ViewportBuilder;
use eframe::NativeOptions;
use egui_dock::{DockArea, DockState, Style};
fn main() -> eframe::Result<()> {
let size = ViewportBuilder::default().with_maximized(true);
let options = NativeOptions {
viewport: size,
..Default::default()
};
eframe::run_native(
"Lapis Ders Dağıtım",
options,
Box::new(|_cc| Ok(Box::<MyApp>::default())),
)
}
static DAYS: &[&str] = &[
"Pazartesi",
"Salı",
"Çarşamba",
"Perşembe",
"Cuma",
"Cumartesi",
"Pazar",
];
#[derive(Default, Debug)]
enum Page {
#[default]
Home,
Signin,
Login,
}
#[derive(Default, Debug)]
enum HomeTab {
#[default]
Home,
Classes,
Teachers,
Classrooms,
Lectures,
Limitations,
Activities,
Generate,
}
impl egui_dock::TabViewer for HomeTab {
type Tab = HomeTab;
fn title(&mut self, tab: &mut Self::Tab) -> egui_dock::egui::WidgetText {
format!("{:?}", &*tab).into()
}
fn ui(&mut self, ui: &mut egui::Ui, tab: &mut Self::Tab) {
match tab {
HomeTab::Home => {
tabs::school_page(ui);
}
HomeTab::Classes => {
tabs::classes::classes_page(ui);
}
HomeTab::Teachers => {
tabs::teachers::teachers_page(ui);
}
HomeTab::Classrooms => {
tabs::classrooms::classrooms_page(ui);
}
HomeTab::Lectures => {
tabs::lectures::lectures_page(ui);
}
HomeTab::Limitations => {
tabs::limitations::limitations(ui);
}
HomeTab::Activities => {
tabs::activities::activities_ui(ui);
}
HomeTab::Generate => {
tabs::generate::generate_ui(ui);
}
};
}
}
struct MyApp {
tree: DockState<HomeTab>,
page: Page,
}
impl Default for MyApp {
fn default() -> Self {
let tree = DockState::new(vec![
HomeTab::Home,
HomeTab::Classes,
HomeTab::Teachers,
HomeTab::Lectures,
HomeTab::Classrooms,
HomeTab::Limitations,
HomeTab::Activities,
HomeTab::Generate,
]);
let page = Page::Home;
// You can modify the tree before constructing the dock
// let [a, b] =
// tree.main_surface_mut()
// .split_left(NodeIndex::root(), 0.3, vec!["tab3".to_owned()]);
// let [_, _] = tree
// .main_surface_mut()
// .split_below(a, 0.7, vec!["tab4".to_owned()]);
// let [_, _] = tree
// .main_surface_mut()
// .split_below(b, 0.5, vec!["tab5".to_owned()]);
Self { tree, page }
}
}
impl eframe::App for MyApp {
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
// ctx.set_theme(ThemePreference::Light);
// let mut fonts = FontDefinitions::default();
// // Install my own font (maybe supporting non-latin characters):
// fonts.font_data.insert(
// "my_font".to_owned(),
// std::sync::Arc::new(
// // .ttf and .otf supported
// FontData::from_static(include_bytes!("./fonts/FreeSansBold.otf")),
// ),
// );
// fonts
// .families
// .get_mut(&egui::FontFamily::Proportional)
// .unwrap()
// .insert(0, "my_font".to_owned());
// ctx.set_fonts(fonts);
match self.page {
Page::Home => {
DockArea::new(&mut self.tree)
.show_leaf_close_all_buttons(false)
.style(Style::from_egui(ctx.style().as_ref()))
.show_close_buttons(false)
.show_add_popup(true)
.show(ctx, &mut HomeTab::Home);
}
_ => {}
}
}
}
// pub struct TemplateApp {
// run_once: bool,
// my_theme: StateMachine,
// }
// impl Default for TemplateApp {
// fn default() -> Self {
// Self {
// run_once: false,
// my_theme: egui_themes::StateMachine::new(),
// }
// }
// }