Skip to content

Commit c89dfa7

Browse files
committed
use Frame container for output
- tweak language selection in gui
1 parent 95bf3b6 commit c89dfa7

7 files changed

Lines changed: 94 additions & 59 deletions

File tree

build.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,12 @@ fn main() {
3939
))
4040
.arg(":java:assemble")
4141
.arg("--stacktrace")
42+
.arg("--no-daemon")
4243
.status()
4344
.expect("Gradle build should succeed");
4445
}
4546
println!("cargo::rerun-if-changed=java/build.gradle.kts");
4647
println!("cargo::rerun-if-changed=java/src");
4748
println!("cargo::rerun-if-changed=res/windows");
49+
println!("cargo::rerun-if-changed=locales/");
4850
}

locales/cs.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"_version": 1,
3-
"gui.ui.title": "Instalace Ornithe",
3+
"language_name": "Čeština",
4+
"gui.ui.title": "Instalační program Ornithe",
45
"gui.ui.language": "Jazyk: ",
56
"gui.error.no_available_minecraft_versions":"Nebyli nalezeny žádné dostupné verze Minecraftu. Zkontrolujte zda jste připojeni k internetu!",
67
"gui.ui.button.pick_location":"Zvolit umístění",
@@ -29,7 +30,7 @@
2930
"gui.ui.output_location":"Umístění výstupu",
3031
"gui.ui.install_location": "Umístění instalace",
3132
"gui.button.install": "Nainstalovat",
32-
"gui.error.generic": "Chyba instlačního programu Ornithe",
33+
"gui.error.generic": "Chyba instalačního programu Ornithe",
3334
"gui.mode.client": "Klient (Oficiální Launcher)",
3435
"gui.mode.mmc": "MultiMC/PrismLauncher",
3536
"gui.mode.server": "Server",

locales/de.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
{
22
"_version": 1,
3-
"gui.ui.title": "Ornithe Installierer",
3+
"language_name": "Deutsch",
4+
"gui.ui.title": "Ornithe Installer",
45
"gui.ui.language": "Sprache: ",
56
"gui.error.no_available_minecraft_versions":"Keine verfügbaren Minecraft-Versionen konnten gefunden werden. Überprüfe deine Internetverbindung!",
67
"gui.ui.button.pick_location":"Ort Auswählen",
7-
"gui.ui.environment":"Umgebung",
8+
"gui.ui.environment":"Installationsziel",
89
"gui.ui.minecraft_version":"Minecraft-Version",
910
"gui.ui.search_available_versions":"Versionen durchsuchen...",
1011
"gui.ui.checkbox.snapshots": "Snapshots",
@@ -29,7 +30,7 @@
2930
"gui.ui.output_location":"Ausgabeverzeichnis",
3031
"gui.ui.install_location": "Installationsort",
3132
"gui.button.install": "Installieren",
32-
"gui.error.generic": "Ornithe Installierer Fehler",
33+
"gui.error.generic": "Ornithe Installer Fehler",
3334
"gui.mode.client": "Client (Offizieller Launcher)",
3435
"gui.mode.mmc": "MultiMC/PrismLauncher",
3536
"gui.mode.server": "Server",

locales/en.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{
22
"_version": 1,
3+
"language_name": "English",
34
"gui.ui.title": "Ornithe Installer",
45
"gui.ui.language": "Language: ",
56
"gui.error.no_available_minecraft_versions":"Could not find any available Minecraft versions. Make sure you are connected to the internet!",

locales/fr.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{
22
"_version": 1,
3+
"language_name": "François",
34
"gui.ui.title": "Installateur Ornithe",
45
"gui.ui.language": "Langue : ",
56
"gui.error.no_available_minecraft_versions":"Aucune version disponible de Minecraft n'a été trouvée. Assurez-vous d'être connecté à Internet !",
@@ -33,7 +34,7 @@
3334
"gui.mode.client": "Client (Lanceur officiel)",
3435
"gui.mode.mmc": "MultiMC/PrismLauncher",
3536
"gui.mode.server": "Serveur",
36-
"gui.ui.show_loader_betas": "Shower les Betas",
37+
"gui.ui.show_loader_betas": "Montrer les versions Bétas",
3738
"client.error.directory_does_not_exist": "Le dossier %{dir} n'existe pas. Assurez vous d'avoir sélectionné le bon dossier et lancé le jeu au moins une fois avant.",
3839
"client.info.installation_start": "Installation du client pour %{version} utilisant %{loader} Loader %{loader_version} vers %{destination}",
3940
"client.info.fetching_launch_jsons": "Récupération des jsons de lancement...",

locales/it.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"_version": 1,
3-
"lang_name": "Italiano",
3+
"language_name": "Italiano",
44
"gui.ui.title": "Installazione di Ornithe",
55
"gui.ui.language": "Lingua: ",
66
"gui.error.no_available_minecraft_versions": "Non e' stato possibile trovare alcuna versione di Minecraft. Assicurati di essere connesso ad internet!",

src/ui/gui.rs

Lines changed: 81 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ use std::{
66
};
77

88
use egui::{
9-
Button, Checkbox, Color32, ComboBox, FontId, Frame, Layout, ProgressBar, RichText, Sense,
10-
Theme, UiBuilder, Vec2, Vec2b,
9+
Align, Button, Checkbox, Color32, ComboBox, FontId, Frame, Layout, Margin, ProgressBar,
10+
RichText, Sense, Theme, UiBuilder, Vec2, Vec2b,
1111
};
1212
use log::{error, info};
1313
use rfd::{AsyncFileDialog, AsyncMessageDialog, MessageButtons, MessageDialogResult};
@@ -260,11 +260,19 @@ impl App {
260260
line_rect.min.y -= 6.0;
261261
let mut child = ui.new_child(UiBuilder::new().max_rect(line_rect));
262262
child.horizontal_centered(|ui| {
263-
ui.text_edit_singleline(match self.mode {
263+
let res = ui.text_edit_singleline(match self.mode {
264264
Mode::Client => &mut self.client_install_location,
265265
Mode::Server => &mut self.server_install_location,
266266
Mode::MMC => &mut self.mmc_output_location,
267267
});
268+
if !res.hovered() && !res.has_focus() {
269+
ui.painter().rect_stroke(
270+
res.rect.expand(ui.visuals().widgets.hovered.expansion),
271+
ui.visuals().widgets.hovered.corner_radius,
272+
ui.visuals().widgets.hovered.bg_stroke,
273+
egui::StrokeKind::Inside,
274+
);
275+
}
268276
if ui.button(t!("gui.ui.button.pick_location")).clicked() {
269277
let picked = AsyncFileDialog::new()
270278
.set_directory(Path::new(match self.mode {
@@ -305,8 +313,10 @@ impl App {
305313
let mut child = ui.new_child(UiBuilder::new().max_rect(line_rect));
306314
ui.add_space(20.0);
307315
child.horizontal_centered(|ui| {
316+
ui.spacing_mut().icon_width -= 4.0;
308317
let mut clicked = false;
309318
let width = line_rect.width() / 2.0;
319+
let prev_mode = self.mode;
310320
ui.scope(|ui| {
311321
ui.set_max_width(width);
312322
clicked |= ui
@@ -325,7 +335,7 @@ impl App {
325335
.radio_value(&mut self.mode, Mode::Server, t!("gui.mode.server"))
326336
.clicked();
327337
});
328-
if clicked {
338+
if clicked && prev_mode != self.mode {
329339
self.filter_minecraft_versions();
330340
}
331341
});
@@ -339,22 +349,31 @@ impl App {
339349
let mut child = ui.new_child(UiBuilder::new().max_rect(line_rect));
340350

341351
child.horizontal_centered(|ui| {
342-
ui.add(
343-
DropDownBox::from_iter(
344-
&self.filtered_minecraft_versions,
345-
"minecraft_version",
346-
&mut self.selected_minecraft_version,
347-
|ui, text| {
348-
Button::selectable(false, text)
349-
.min_size(Vec2::new(ui.available_width(), 0.0))
350-
.ui(ui)
351-
},
352-
&mut self.minecraft_version_dropdown_open,
353-
)
354-
.max_height(130.0)
355-
.desired_width(170.0)
356-
.hint_text(t!("gui.ui.search_available_versions")),
357-
);
352+
let res = DropDownBox::from_iter(
353+
&self.filtered_minecraft_versions,
354+
"minecraft_version",
355+
&mut self.selected_minecraft_version,
356+
|ui, text| {
357+
Button::selectable(false, text)
358+
.min_size(Vec2::new(ui.available_width(), 0.0))
359+
.ui(ui)
360+
},
361+
&mut self.minecraft_version_dropdown_open,
362+
)
363+
.max_height(130.0)
364+
.desired_width(170.0)
365+
.hint_text(RichText::from(t!("gui.ui.search_available_versions")))
366+
.ui(ui);
367+
368+
if !res.hovered() && !res.has_focus() {
369+
ui.painter().rect_stroke(
370+
res.rect.expand(ui.visuals().widgets.hovered.expansion),
371+
ui.visuals().widgets.hovered.corner_radius,
372+
ui.visuals().widgets.hovered.bg_stroke,
373+
egui::StrokeKind::Inside,
374+
);
375+
}
376+
358377
if ui
359378
.checkbox(&mut self.show_snapshots, t!("gui.ui.checkbox.snapshots"))
360379
.clicked()
@@ -707,21 +726,26 @@ impl eframe::App for App {
707726
ui.style_mut().interaction.selectable_labels = false;
708727
ui.style_mut().wrap_mode = Some(egui::TextWrapMode::Wrap);
709728
ui.add_enabled_ui(!self.file_picker_open, |ui| {
710-
let mut child =
711-
ui.new_child(UiBuilder::new().layout(Layout::right_to_left(egui::Align::TOP)));
712729
ui.vertical_centered(|ui| {
713730
ui.heading(t!("gui.ui.title"));
714731
});
732+
ui.add_space(15.0);
733+
let mut child =
734+
ui.new_child(UiBuilder::new().layout(Layout::right_to_left(egui::Align::TOP)));
735+
let current = &*rust_i18n::locale();
715736
child.horizontal(|ui| {
716737
ComboBox::from_id_salt("language")
717738
.width(20.0)
718-
.selected_text(&*rust_i18n::locale())
739+
.selected_text(t!(format!("language_name"), locale = current))
719740
.show_ui(ui, |ui| {
720741
for ele in rust_i18n::available_locales!() {
721-
if ui
722-
.selectable_label(*ele == *rust_i18n::locale(), ele)
723-
.clicked()
742+
let mut name = t!(format!("language_name"), locale = ele);
743+
if name == t!(format!("language_name"), locale = "en")
744+
&& ele != "en"
724745
{
746+
name = std::borrow::Cow::Borrowed(ele);
747+
}
748+
if ui.selectable_label(ele == current, name).clicked() {
725749
rust_i18n::set_locale(ele);
726750
}
727751
}
@@ -732,34 +756,37 @@ impl eframe::App for App {
732756
if self.installation_task.is_some() {
733757
ui.vertical(|ui| {
734758
let progress = self.installation_task.as_mut().unwrap();
735-
ui.add_space(15.0);
736759
progress.poll();
737760

738761
ui.label(t!("gui.ui.output"));
739-
let mut rect = ui.cursor();
740-
let mut output_height = ui.available_height() - 44.0;
741-
rect.set_width(ui.available_width());
742-
rect.set_height(output_height);
743-
ui.painter().rect_filled(rect, 8.0, Color32::LIGHT_GRAY);
744-
ui.add_space(4.0);
745-
output_height -= 10.0;
746-
ScrollArea::vertical()
747-
.auto_shrink(Vec2b::FALSE)
748-
.min_scrolled_height(output_height)
749-
.min_scrolled_width(ui.available_width())
750-
.max_height(output_height)
751-
.max_width(ui.available_width())
752-
.stick_to_bottom(true)
762+
let output_height = ui.available_height() - 54.0;
763+
Frame::new()
764+
.inner_margin(Margin {
765+
left: 0,
766+
right: 2,
767+
top: 6,
768+
bottom: 6,
769+
})
770+
.corner_radius(8.0)
771+
.fill(Color32::LIGHT_GRAY)
753772
.show(ui, |ui| {
754-
let text = progress.status.join("\n");
755-
TextEdit::multiline(&mut text.as_str())
756-
.desired_width(ui.available_width())
757-
.font(FontId::monospace(10.0))
758-
.return_key(None)
759-
.cursor_at_end(true)
760-
.show(ui);
773+
ScrollArea::vertical()
774+
.auto_shrink(Vec2b::FALSE)
775+
.min_scrolled_height(output_height)
776+
.min_scrolled_width(ui.available_width())
777+
.max_height(output_height)
778+
.max_width(ui.available_width())
779+
.stick_to_bottom(true)
780+
.show(ui, |ui| {
781+
let text = progress.status.join("\n");
782+
TextEdit::multiline(&mut text.as_str())
783+
.desired_width(ui.available_width())
784+
.font(FontId::monospace(10.0))
785+
.return_key(None)
786+
.cursor_at_end(true)
787+
.show(ui);
788+
});
761789
});
762-
ui.add_space(4.0);
763790
ProgressBar::new(progress.last_progress)
764791
.desired_width(ui.available_width())
765792
.animate(true)
@@ -791,8 +818,6 @@ impl eframe::App for App {
791818
return;
792819
}
793820
ui.vertical(|ui| {
794-
ui.add_space(15.0);
795-
796821
self.add_environment_options(ui);
797822

798823
ui.add_space(15.0);
@@ -962,13 +987,17 @@ impl<F: FnMut(&mut Ui, &str) -> Response, V: AsRef<str>, I: Iterator<Item = V>>
962987
{
963988
continue;
964989
}
990+
let ele_response = display(ui, text);
965991

966-
if display(ui, text).clicked() {
992+
if ele_response.clicked() {
967993
*buf = text.to_owned();
968994
changed = true;
969995

970996
*open = false;
971997
}
998+
if ele_response.gained_focus() && !ui.is_rect_visible(ele_response.rect) {
999+
ele_response.scroll_to_me(Some(Align::BOTTOM));
1000+
}
9721001
}
9731002
});
9741003
}) {

0 commit comments

Comments
 (0)