Header buttons

This commit is contained in:
Piotr Siuszko 2022-09-25 20:57:59 +02:00
parent 59d22bcd73
commit f4baad7c0c
3 changed files with 110 additions and 29 deletions

View File

@ -1,3 +1,4 @@
pub const VERSION: &str = env!("CARGO_PKG_VERSION"); pub const VERSION: &str = env!("CARGO_PKG_VERSION");
pub const HOMEPAGE: &str = env!("CARGO_PKG_HOMEPAGE"); pub const HOMEPAGE: &str = env!("CARGO_PKG_HOMEPAGE");
pub const APP_NAME: &str = "Rusty Unity Hub";
pub const VERTICAL_SPACING: f32 = 8.0; pub const VERTICAL_SPACING: f32 = 8.0;

View File

@ -1,6 +1,6 @@
use crate::{ use crate::{
consts::HOMEPAGE, consts::HOMEPAGE,
consts::{VERSION, VERTICAL_SPACING}, consts::{VERSION, VERTICAL_SPACING, APP_NAME},
window_tab::WindowTab, window_tab::WindowTab,
}; };
use eframe::{ use eframe::{
@ -69,8 +69,8 @@ impl HubClient {
} }
}); });
}); });
row.col(|ui| { row.col(|ui| {ui.with_layout(
ui.vertical_centered_justified(|ui| { Layout::top_down_justified(eframe::emath::Align::Max),|ui| {
ui.add_space(VERTICAL_SPACING); ui.add_space(VERTICAL_SPACING);
ui.label(&paths[row_index]); ui.label(&paths[row_index]);
}); });
@ -78,21 +78,6 @@ impl HubClient {
}); });
}); });
}); });
ui.vertical_centered_justified(|ui| {
if ui.button("Add new").clicked() {
let directory = FileDialog::new().pick_folder();
if let Some(dir) = directory {
self.hub
.config
.unity_search_paths
.push(dir.into_os_string().into_string().unwrap());
self.save_config(true);
}
}
if ui.button("Refresh").clicked() {
self.hub.config.rebuild();
}
});
ui.add_space(VERTICAL_SPACING * 2.0); ui.add_space(VERTICAL_SPACING * 2.0);
ui.label(egui::RichText::new("Installed editor versions").heading()); ui.label(egui::RichText::new("Installed editor versions").heading());
@ -147,7 +132,7 @@ impl HubClient {
.column(Size::initial(150.0).at_least(150.0)) .column(Size::initial(150.0).at_least(150.0))
.column(Size::initial(90.0).at_least(40.0)) .column(Size::initial(90.0).at_least(40.0))
.column(Size::remainder().at_least(260.0)) .column(Size::remainder().at_least(260.0))
.resizable(true); .resizable(false);
table table
.header(20.0, |mut header| { .header(20.0, |mut header| {
@ -244,24 +229,118 @@ impl HubClient {
); );
}); });
} }
fn draw_editors_header(&mut self, _ctx: &egui::Context, ui: &mut Ui) {
let text_height = egui::TextStyle::Body.resolve(ui.style()).size * 2.0;
let table = build_header_table(ui);
table.body(|body| {
body.rows(text_height, 1, |_, mut row| {
row.col(|ui| {
add_header(ui);
});
row.col(|ui| {
ui.vertical_centered_justified(|ui| {
ui.add_space(VERTICAL_SPACING);
if ui.button("Refresh").clicked() {
self.hub.config.rebuild();
}
});
});
row.col(|ui| {
ui.vertical_centered_justified(|ui| {
ui.add_space(VERTICAL_SPACING);
if ui.button("Add new").clicked() {
let directory = FileDialog::new().pick_folder();
if let Some(dir) = directory {
self.hub
.config
.unity_search_paths
.push(dir.into_os_string().into_string().unwrap());
self.save_config(true);
}
}
});
});
});
});
}
fn draw_project_header(&mut self, _ctx: &egui::Context, ui: &mut Ui) {
let text_height = egui::TextStyle::Body.resolve(ui.style()).size * 2.0;
let table = build_header_table(ui);
table.body(|body| {
body.rows(text_height, 1, |_, mut row| {
row.col(|ui| {
add_header(ui);
});
row.col(|ui| {
ui.vertical_centered_justified(|ui| {
ui.add_space(VERTICAL_SPACING);
if ui.button("Import").on_hover_text("Not implemented yet").clicked() {
}
});
});
row.col(|ui| {
ui.vertical_centered_justified(|ui| {
ui.add_space(VERTICAL_SPACING);
if ui.button("Create new").on_hover_text("Not implemented yet").clicked() {
}
});
});
});
});
}
}
fn build_header_table(ui: &mut Ui) -> TableBuilder {
let table = TableBuilder::new(ui)
.striped(false)
.scroll(false)
.cell_layout(egui::Layout::left_to_right(egui::Align::Center))
.column(Size::remainder().at_least(150.0))
.column(Size::initial(100.0).at_most(100.0))
.column(Size::initial(100.0).at_most(100.0))
.resizable(false);
table
}
fn add_header(ui: &mut Ui) {
ui.with_layout(
Layout::top_down_justified(eframe::emath::Align::Min),
|ui| {
ui.add_space(5.0);
let text = egui::RichText::new(APP_NAME).heading().strong();
ui.add(egui::Label::new(text));
ui.add_space(5.0);
},
);
} }
impl eframe::App for HubClient { impl eframe::App for HubClient {
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
egui::TopBottomPanel::top("topPanel").show(ctx, |ui| { egui::TopBottomPanel::top("topPanel")
ui.add_space(5.0); .frame(egui::Frame::canvas(&ctx.style()))
let text = egui::RichText::new(" Rusty Unity Hub").heading().strong(); .show(ctx, |ui| {
ui.add(egui::Label::new(text)); ui.horizontal(|ui| {
ui.add_space(5.0); ui.add_space(14.0);
}); match self.current_tab {
WindowTab::Projects => self.draw_project_header(&ctx, ui),
WindowTab::Editors => self.draw_editors_header(&ctx, ui),
};
ui.add_space(14.0);
});
});
egui::SidePanel::left("dsadsa") egui::SidePanel::left("dsadsa")
.resizable(false) .resizable(false)
.frame(egui::Frame::canvas(&ctx.style()))
.show(ctx, |ui| { .show(ctx, |ui| {
ui.vertical_centered_justified(|ui| { ui.vertical_centered_justified(|ui| {
ui.add_space(VERTICAL_SPACING); ui.add_space(VERTICAL_SPACING);
let button = let button = egui::Button::new(egui::RichText::new("Projects").heading())
egui::Button::new(egui::RichText::new("Projects").heading()).frame(false); .frame(&self.current_tab == &WindowTab::Projects);
if ui if ui
.add_enabled(&self.current_tab != &WindowTab::Projects, button) .add_enabled(&self.current_tab != &WindowTab::Projects, button)
.clicked() .clicked()
@ -273,7 +352,7 @@ impl eframe::App for HubClient {
.add_enabled( .add_enabled(
&self.current_tab != &WindowTab::Editors, &self.current_tab != &WindowTab::Editors,
egui::Button::new(egui::RichText::new("Editors").heading()) egui::Button::new(egui::RichText::new("Editors").heading())
.frame(false), .frame(&self.current_tab == &WindowTab::Editors),
) )
.clicked() .clicked()
{ {

View File

@ -1,5 +1,6 @@
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release
extern crate confy; extern crate confy;
use consts::{APP_NAME, VERSION};
use eframe::{egui, IconData, NativeOptions}; use eframe::{egui, IconData, NativeOptions};
use std::io::Cursor; use std::io::Cursor;
@ -30,7 +31,7 @@ fn main() {
..NativeOptions::default() ..NativeOptions::default()
}; };
eframe::run_native( eframe::run_native(
"Rusty Hub", &format!("{} v {}", APP_NAME, VERSION),
options, options,
Box::new(|cc| Box::new(crate::hub_client::HubClient::new(cc))), Box::new(|cc| Box::new(crate::hub_client::HubClient::new(cc))),
); );