Skip to content

Commit

Permalink
More sane tabs layout
Browse files Browse the repository at this point in the history
  • Loading branch information
barsoosayque committed Sep 30, 2024
1 parent fa9bc83 commit bcd02b1
Show file tree
Hide file tree
Showing 2 changed files with 218 additions and 169 deletions.
162 changes: 93 additions & 69 deletions crates/opensi-editor/src/package_tab.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,26 +5,39 @@ use crate::utils::{danger_button, unselectable_heading, unselectable_label};

/// Workarea tab to edit package info.
pub fn package_tab(package: &mut Package, selected: &mut Option<PackageNode>, ui: &mut egui::Ui) {
egui_extras::StripBuilder::new(ui)
.size(egui_extras::Size::exact(400.0))
.size(egui_extras::Size::remainder().at_least(400.0).at_most(800.0))
.cell_layout(egui::Layout::top_down(egui::Align::Min))
.horizontal(|mut strip| {
strip.cell(|ui| {
unselectable_heading("Информация о пакете", ui);
ui.separator();
package_info_edit(package, ui);
});
strip.cell(|ui| {
unselectable_heading("Раунды", ui);
ui.separator();
ui.vertical(|ui| {
ui.allocate_ui(egui::vec2(ui.available_width(), 200.0), |ui| {
egui_extras::StripBuilder::new(ui)
.sizes(egui_extras::Size::remainder().at_most(500.0), 2)
.cell_layout(egui::Layout::top_down_justified(egui::Align::Min))
.horizontal(|mut strip| {
strip.cell(|ui| {
unselectable_heading("Информация о пакете", ui);
ui.separator();
package_info_edit(package, ui);
});
strip.cell(|ui| {
unselectable_heading("Метаданные", ui);
ui.separator();
package_metadata_edit(package, ui);
});
});
});

ui.allocate_ui(egui::vec2(1020.0, ui.available_height()), |ui| {
unselectable_heading("Раунды", ui);
ui.separator();
ui.push_id("package_rounds", |ui| {
package_rounds(package, selected, ui);
});
});
});
}

fn package_info_edit(package: &mut Package, ui: &mut egui::Ui) {
egui_extras::TableBuilder::new(ui)
.id_salt("package-info-edit")
.vscroll(false)
.column(egui_extras::Column::auto())
.column(egui_extras::Column::remainder())
.cell_layout(egui::Layout::left_to_right(egui::Align::Min))
Expand All @@ -49,22 +62,24 @@ fn package_info_edit(package: &mut Package, ui: &mut egui::Ui) {
ui.text_edit_singleline(&mut package.language);
});
});
}

ui.collapsing("Метаданные", |ui| {
egui_extras::TableBuilder::new(ui)
.column(egui_extras::Column::auto())
.column(egui_extras::Column::remainder())
.cell_layout(egui::Layout::left_to_right(egui::Align::Min))
.striped(true)
.body(|mut body| {
package_edit_row("ID пакета", &mut body, |ui| {
ui.label(&package.id);
});
package_edit_row("Версия", &mut body, |ui| {
ui.label(format!("{:.1}", package.version));
});
fn package_metadata_edit(package: &Package, ui: &mut egui::Ui) {
egui_extras::TableBuilder::new(ui)
.id_salt("package-metadata-edit")
.vscroll(false)
.column(egui_extras::Column::auto())
.column(egui_extras::Column::remainder())
.cell_layout(egui::Layout::left_to_right(egui::Align::Min))
.striped(true)
.body(|mut body| {
package_edit_row("ID пакета", &mut body, |ui| {
ui.label(&package.id);
});
});
package_edit_row("Версия пакета", &mut body, |ui| {
ui.label(format!("{:.1}", package.version));
});
});
}

fn package_edit_row(
Expand Down Expand Up @@ -109,49 +124,58 @@ fn package_rounds(package: &mut Package, selected: &mut Option<PackageNode>, ui:
response
}

ui.vertical_centered_justified(|ui| {
let button_size = 20.0;
let max_height = ui.available_height() - 100.0;

egui_extras::TableBuilder::new(ui)
.max_scroll_height(max_height)
.column(egui_extras::Column::remainder())
.column(egui_extras::Column::exact(button_size))
.cell_layout(
egui::Layout::top_down_justified(egui::Align::Center)
.with_main_wrap(false)
.with_cross_justify(true)
.with_cross_align(egui::Align::Center),
)
.body(|mut body| {
for index in 0..package.rounds.len() {
body.row((button_size + 4.0) * 3.0, |mut row| {
row.col(|ui| {
let Some(round) = package.get_round_mut(index) else {
return;
};
if round_card(round, ui).clicked() {
*selected = Some(PackageNode::Round { index });
}
});
row.col(|ui| {
ui.add_space(4.0);
if ui.button("✏").on_hover_text("Редактировать").clicked()
{
*selected = Some(PackageNode::Round { index });
}
if ui.button("🗐").on_hover_text("Дублировать").clicked() {
package.duplicate_round(index);
}
if danger_button("❌", ui).on_hover_text("Удалить").clicked() {
package.remove_round(index);
}
});
egui_extras::StripBuilder::new(ui)
.size(egui_extras::Size::remainder())
.size(egui_extras::Size::exact(30.0))
.cell_layout(egui::Layout::centered_and_justified(egui::Direction::TopDown))
.vertical(|mut strip| {
strip.cell(|ui| {
let button_size = 20.0;
egui_extras::TableBuilder::new(ui)
.id_salt("rounds")
.column(egui_extras::Column::remainder())
.column(egui_extras::Column::exact(button_size))
.cell_layout(
egui::Layout::top_down_justified(egui::Align::Center)
.with_main_wrap(false)
.with_cross_justify(true)
.with_cross_align(egui::Align::Center),
)
.body(|mut body| {
for index in 0..package.rounds.len() {
body.row((button_size + 4.0) * 3.0, |mut row| {
row.col(|ui| {
let Some(round) = package.get_round_mut(index) else {
return;
};
if round_card(round, ui).clicked() {
*selected = Some(PackageNode::Round { index });
}
});
row.col(|ui| {
ui.add_space(4.0);
if ui.button("✏").on_hover_text("Редактировать").clicked()
{
*selected = Some(PackageNode::Round { index });
}
if ui.button("🗐").on_hover_text("Дублировать").clicked()
{
package.duplicate_round(index);
}
if danger_button("❌", ui).on_hover_text("Удалить").clicked()
{
package.remove_round(index);
}
});
});
}
});
});

strip.cell(|ui| {
if ui.button("➕ Добавить новый раунд").clicked() {
package.allocate_round();
}
});
if ui.button("➕ Добавить новый раунд").clicked() {
package.allocate_round();
}
});
});
}
Loading

0 comments on commit bcd02b1

Please sign in to comment.