Start UI Rewrite
This commit is contained in:
parent
2ed95c72a0
commit
6eec9cdc04
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1,3 @@
|
||||
/target
|
||||
.idea
|
||||
.vscode
|
||||
|
8
.idea/.gitignore
vendored
8
.idea/.gitignore
vendored
@ -1,8 +0,0 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
@ -1,8 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/pkg-pika-installer-gtk4.iml" filepath="$PROJECT_DIR$/.idea/pkg-pika-installer-gtk4.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
@ -1,11 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="EMPTY_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/target" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
8
.vscode/settings.json
vendored
8
.vscode/settings.json
vendored
@ -1,8 +0,0 @@
|
||||
{
|
||||
"css.lint.emptyRules": "ignore",
|
||||
"scss.lint.emptyRules": "ignore",
|
||||
"rust-analyzer.linkedProjects": [
|
||||
"./Cargo.toml",
|
||||
"./Cargo.toml"
|
||||
]
|
||||
}
|
63
Cargo.lock
generated
63
Cargo.lock
generated
@ -46,18 +46,6 @@ version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "0.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4f67931368edf3a9a51d29886d245f1c3db2f1ef0dcc9e35ff70341b78c10d23"
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "0.8.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1370e9fc2a6ae53aea8b7a5110edbd08836ed87c88736dfabccade1c2b44bff4"
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "1.3.2"
|
||||
@ -424,19 +412,6 @@ dependencies = [
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "glib"
|
||||
version = "0.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "81f514a8abd315ede0e94e39ce5987fdb99191c5f812e5066bc5bdb965104fc4"
|
||||
dependencies = [
|
||||
"bitflags 0.5.0",
|
||||
"glib-sys 0.3.4",
|
||||
"gobject-sys 0.3.4",
|
||||
"lazy_static 0.2.11",
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "glib"
|
||||
version = "0.18.5"
|
||||
@ -509,17 +484,6 @@ dependencies = [
|
||||
"syn 2.0.72",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "glib-sys"
|
||||
version = "0.3.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8826cbc94631507bdd91ee40f7e099bfaa3cc4f43c086b4d1c15cff5b4e8220b"
|
||||
dependencies = [
|
||||
"bitflags 0.8.2",
|
||||
"libc",
|
||||
"pkg-config",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "glib-sys"
|
||||
version = "0.18.1"
|
||||
@ -599,18 +563,6 @@ dependencies = [
|
||||
"system-deps 6.2.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gobject-sys"
|
||||
version = "0.3.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "87373f64e136e9ea192ff5d3ef676a51e9ac6ab06b629223a081e0523c5f04e2"
|
||||
dependencies = [
|
||||
"bitflags 0.8.2",
|
||||
"glib-sys 0.3.4",
|
||||
"libc",
|
||||
"pkg-config",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gobject-sys"
|
||||
version = "0.18.0"
|
||||
@ -843,12 +795,6 @@ version = "1.0.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c"
|
||||
|
||||
[[package]]
|
||||
name = "lazy_static"
|
||||
version = "0.2.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73"
|
||||
|
||||
[[package]]
|
||||
name = "lazy_static"
|
||||
version = "1.4.0"
|
||||
@ -980,7 +926,7 @@ version = "1.0.2"
|
||||
dependencies = [
|
||||
"async-channel",
|
||||
"duct",
|
||||
"glib 0.1.3",
|
||||
"glib 0.20.0",
|
||||
"glob",
|
||||
"gnome-desktop",
|
||||
"gtk4",
|
||||
@ -1156,7 +1102,7 @@ checksum = "399801f4d955abf1c3ce3ce2215dc76bd40beb4ae39e3a84936b21a79ce2caa5"
|
||||
dependencies = [
|
||||
"arc-swap",
|
||||
"globwalk",
|
||||
"lazy_static 1.4.0",
|
||||
"lazy_static",
|
||||
"normpath",
|
||||
"once_cell",
|
||||
"proc-macro2",
|
||||
@ -1220,11 +1166,12 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "serde_json"
|
||||
version = "1.0.113"
|
||||
version = "1.0.122"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "69801b70b1c3dac963ecb03a364ba0ceda9cf60c71cfe475e99864759c8b8a79"
|
||||
checksum = "784b6203951c57ff748476b126ccb5e8e2959a5c19e5c617ab1956be3dbc68da"
|
||||
dependencies = [
|
||||
"itoa",
|
||||
"memchr",
|
||||
"ryu",
|
||||
"serde",
|
||||
]
|
||||
|
19
Makefile
19
Makefile
@ -24,3 +24,22 @@ install:
|
||||
#cp -vf data/pika-drivers.svg $(DESTDIR)/usr/share/icons/hicolor/scalable/apps/
|
||||
#cp -vf data/com.pika.drivers.desktop $(DESTDIR)/usr/share/applications/
|
||||
#makepot $(DESTDIR)/usr/share/locale
|
||||
|
||||
install_no_build_debug:
|
||||
#cp -vf target/release/pika-installer-gtk4 $(DESTDIR)/usr/bin/
|
||||
#chmod 755 $(DESTDIR)/usr/bin/pika-installer-gtk4
|
||||
mkdir -p $(DESTDIR)/usr/lib/pika/pika-installer-gtk4/bin/
|
||||
cp -vf target/debug/pika-installer-gtk4 $(DESTDIR)/usr/lib/pika/pika-installer-gtk4/bin/
|
||||
chmod 755 $(DESTDIR)/usr/lib/pika/pika-installer-gtk4/bin/pika-installer-gtk4
|
||||
mkdir -p $(DESTDIR)/usr/lib/pika/pika-installer-gtk4/scripts/
|
||||
mkdir -p $(DESTDIR)/usr/share/glib-2.0/schemas/
|
||||
cp -rvf data/scripts/*.sh $(DESTDIR)/usr/lib/pika/pika-installer-gtk4/scripts/
|
||||
cp -rvf data/scripts/*.py $(DESTDIR)/usr/lib/pika/pika-installer-gtk4/scripts/
|
||||
cp data/*.xml $(DESTDIR)/usr/share/glib-2.0/schemas/
|
||||
chmod 755 $(DESTDIR)/usr/lib/pika/pika-installer-gtk4/scripts/*.sh
|
||||
chmod 755 $(DESTDIR)/usr/lib/pika/pika-installer-gtk4/scripts/*.py
|
||||
mkdir -p $(DESTDIR)/usr/share/applications
|
||||
mkdir -p $(DESTDIR)/usr/share/icons/hicolor/scalable/apps
|
||||
#cp -vf data/pika-drivers.svg $(DESTDIR)/usr/share/icons/hicolor/scalable/apps/
|
||||
#cp -vf data/com.pika.drivers.desktop $(DESTDIR)/usr/share/applications/
|
||||
#makepot $(DESTDIR)/usr/share/locale
|
||||
|
@ -72,6 +72,7 @@
|
||||
"eula_buffer": "There are a few things to keep in mind: \n 1 - You understand that this distribution is -NOT- to be considered an ‘Ubuntu Flavor’. \n 2 - This is a hobby distribution, so we will try our best to provide formal support but it will -NOT- be guaranteed. \n 3 - Although PikaOS might provide identical patches and user experience to the Nobara project, we are -NOT- directly a part of them so questions and bug reports should not be sent directly to them (they dont have to deal with it!) \n 4 - While the installer is running DO NOT INTERRUPT IT! or you will end up with a corrupted system. \n 5 - Try to use pikman instead of apt when using the terminal, it is much faster! \n 6 - You understand the xone driver downloads needed binaries locally and does not directly package or distribute any copyrighted firmware or other related data. \n 7 - Automatic partitioning will format all partitons on a drive, so if you want to dualboot make a separate EFI partition for PikaOS and use manual partitioning \n 8 - In case you need the login info for this session: \n - username: pikaos \n - password: \n MEANING: JUST PRESS ENTER",
|
||||
"i_agree_eula": "I Agree and Accept the User license Agreement",
|
||||
"eula": "EULA",
|
||||
"bad_boot_platform": "Un Supported Boot Platform",
|
||||
"pika_nowork_csm": "PikaOS Only works on GPT UEFI Systems, this machine is booted in CSM/LEGACY mode.",
|
||||
"exit": "Exit",
|
||||
"subtitle_partition": "Partition",
|
||||
|
130
src/build_ui.rs
130
src/build_ui.rs
@ -1,114 +1,66 @@
|
||||
// Use libraries
|
||||
use adw::prelude::*;
|
||||
use adw::*;
|
||||
use gtk::glib;
|
||||
use gtk::glib::*;
|
||||
/// Use all gtk4 libraries (gtk4 -> gtk because cargo)
|
||||
/// Use all libadwaita libraries (libadwaita -> adw because cargo)
|
||||
use gtk::*;
|
||||
|
||||
use std::path::Path;
|
||||
use gtk::{prelude::*, glib as glib};
|
||||
use vte::ffi::VTE_ALIGN_CENTER;
|
||||
use crate::efi_error_page;
|
||||
use crate::installer_stack_page;
|
||||
|
||||
use crate::save_window_size::save_window_size;
|
||||
|
||||
use crate::welcome_page::welcome_page;
|
||||
|
||||
use crate::efi_error_page::efi_error_page;
|
||||
|
||||
use crate::language_page::language_page;
|
||||
|
||||
// build ui function linked to app startup above
|
||||
pub fn build_ui(app: &adw::Application) {
|
||||
// setup glib
|
||||
gtk::glib::set_prgname(Some("pikaos_installer"));
|
||||
glib::set_prgname(Some("pikaos_installer"));
|
||||
glib::set_application_name(&t!("pikaos_installer"));
|
||||
let glib_settings = gio::Settings::new("com.github.pikaos-linux.pikainstallergtk4");
|
||||
|
||||
// Widget Bank
|
||||
|
||||
let _main_box = gtk::Box::builder()
|
||||
// that puts items vertically
|
||||
.orientation(Orientation::Vertical)
|
||||
.build();
|
||||
|
||||
let window_title_bar = adw::HeaderBar::builder().build();
|
||||
|
||||
let content_stack = gtk::Stack::builder()
|
||||
.hexpand(true)
|
||||
let carousel = adw::Carousel::builder()
|
||||
.allow_long_swipes(false)
|
||||
.allow_mouse_drag(false)
|
||||
.allow_scroll_wheel(false)
|
||||
.interactive(false)
|
||||
.vexpand(true)
|
||||
.transition_type(StackTransitionType::SlideLeftRight)
|
||||
.hexpand(true)
|
||||
.build();
|
||||
|
||||
let content_stack_switcher = gtk::StackSwitcher::builder()
|
||||
.stack(&content_stack)
|
||||
.margin_top(15)
|
||||
.margin_bottom(15)
|
||||
.margin_start(15)
|
||||
.margin_end(15)
|
||||
.sensitive(false)
|
||||
let carousel_indicator = adw::CarouselIndicatorDots::builder()
|
||||
.carousel(&carousel)
|
||||
.build();
|
||||
|
||||
// / _main_box appends
|
||||
//// Add the a title bar to the _main_box
|
||||
_main_box.append(&window_title_bar);
|
||||
//// Add the step indicator to _main_box
|
||||
_main_box.append(&content_stack_switcher);
|
||||
//// Add the stack pager containing all the steps to _main_box
|
||||
_main_box.append(&content_stack);
|
||||
let window_headerbar = adw::HeaderBar::builder()
|
||||
.show_start_title_buttons(true)
|
||||
.title_widget(&carousel_indicator)
|
||||
.build();
|
||||
|
||||
let toolbarview = adw::ToolbarView::builder()
|
||||
.top_bar_style(adw::ToolbarStyle::Flat)
|
||||
.content(&carousel)
|
||||
.build();
|
||||
|
||||
toolbarview.add_top_bar(&window_headerbar);
|
||||
|
||||
let window = adw::ApplicationWindow::builder()
|
||||
// The text on the titlebar
|
||||
.title(t!("pikaos_installer"))
|
||||
// link it to the application "app"
|
||||
.application(app)
|
||||
// Add the box called "_main_box" to it
|
||||
.content(&_main_box)
|
||||
// Application icon
|
||||
.icon_name("calamares")
|
||||
// Get current size from glib
|
||||
.default_width(glib_settings.int("window-width"))
|
||||
.default_height(glib_settings.int("window-height"))
|
||||
// Minimum Size/Default
|
||||
.width_request(700)
|
||||
.height_request(500)
|
||||
// Hide window instead of destroy
|
||||
.hide_on_close(true)
|
||||
//
|
||||
.default_width(700)
|
||||
.default_height(500)
|
||||
.deletable(false)
|
||||
// Startup
|
||||
.content(&toolbarview)
|
||||
.startup_id("pika-installer-gtk4")
|
||||
// build the window
|
||||
.build();
|
||||
|
||||
// Add welcome_page.rs as a page for content_stack
|
||||
if Path::new("/sys/firmware/efi/efivars").exists() {
|
||||
welcome_page(&window, &content_stack);
|
||||
} else {
|
||||
efi_error_page(&window, &content_stack);
|
||||
match Path::new("/sys/firmware/efi/efivars").exists() {
|
||||
true => {
|
||||
let page = installer_stack_page::InstallerStackPage::new();
|
||||
page.set_page_icon("pika-logo");
|
||||
page.set_page_title("Title");
|
||||
page.set_page_subtitle("Subtitle");
|
||||
let gbox = gtk::Box::new(gtk::Orientation::Vertical, 0);
|
||||
gbox.append(>k::Image::builder().icon_name("pika-logo").build());
|
||||
page.set_child_widget(&gbox);
|
||||
carousel.append(&page);
|
||||
}
|
||||
|
||||
// bottom_box moved per page
|
||||
// if content_stack visible child becomes NOT content_stack, show the buttom box
|
||||
//content_stack.connect_visible_child_notify(clone!(@weak bottom_box => move |content_stack| {
|
||||
// let state = content_stack.visible_child_name().as_deref() != Some("welcome_page");
|
||||
// bottom_box.set_visible(state);
|
||||
// }));
|
||||
|
||||
// Add language_page.rs as a page for content_stack
|
||||
language_page(&content_stack, &window);
|
||||
|
||||
// glib maximization
|
||||
if glib_settings.boolean("is-maximized") == true {
|
||||
window.maximize()
|
||||
_ => efi_error_page::efi_error_page(&window, &carousel)
|
||||
}
|
||||
//welcome_page(&window, &carousel),
|
||||
//language_page(&window, &carousel);
|
||||
|
||||
// Connect the hiding of window to the save_window_size function and window destruction
|
||||
window.connect_hide(clone!(@weak window => move |_| save_window_size(&window, &glib_settings)));
|
||||
window.connect_hide(clone!(@weak window => move |_| window.destroy()));
|
||||
// bottom_box moved per page
|
||||
//let content_stack_clone = content_stack.clone();
|
||||
//let content_stack_clone2 = content_stack.clone();
|
||||
//bottom_next_button.connect_clicked(move |_| content_stack_clone.set_visible_child(&content_stack_clone.visible_child().expect("null").next_sibling().unwrap()));
|
||||
//bottom_back_button.connect_clicked(move |_| content_stack_clone2.set_visible_child(&content_stack_clone2.visible_child().expect("null").prev_sibling().unwrap()));
|
||||
window.present();
|
||||
window.present()
|
||||
}
|
@ -1,32 +1,22 @@
|
||||
use gtk::{prelude::*, glib as glib, Justification};
|
||||
use glib::clone;
|
||||
pub fn efi_error_page(window: &adw::ApplicationWindow, main_carousel: &adw::Carousel) {
|
||||
|
||||
// Use libraries
|
||||
use adw::prelude::*;
|
||||
use adw::*;
|
||||
use gtk::glib;
|
||||
use gtk::glib::*;
|
||||
/// Use all gtk4 libraries (gtk4 -> gtk because cargo)
|
||||
/// Use all libadwaita libraries (libadwaita -> adw because cargo)
|
||||
use gtk::*;
|
||||
|
||||
|
||||
|
||||
pub fn efi_error_page(window: &adw::ApplicationWindow, content_stack: >k::Stack) {
|
||||
|
||||
// the header box for the efi_error page
|
||||
let efi_error_main_box = gtk::Box::builder()
|
||||
.orientation(Orientation::Vertical)
|
||||
.orientation(gtk::Orientation::Vertical)
|
||||
.build();
|
||||
|
||||
// the header box for the efi_error page
|
||||
let efi_error_header_box = gtk::Box::builder()
|
||||
.orientation(Orientation::Horizontal)
|
||||
.orientation(gtk::Orientation::Horizontal)
|
||||
.build();
|
||||
|
||||
// the header text for the efi_error page
|
||||
let efi_error_header_text = gtk::Label::builder()
|
||||
.label(t!("bad_boot_platfrom"))
|
||||
.label(t!("bad_boot_platform"))
|
||||
.halign(gtk::Align::End)
|
||||
.hexpand(true)
|
||||
.wrap(true)
|
||||
.justify(Justification::Center)
|
||||
.width_chars(20)
|
||||
.margin_top(15)
|
||||
.margin_bottom(15)
|
||||
.margin_start(15)
|
||||
@ -34,7 +24,6 @@ pub fn efi_error_page(window: &adw::ApplicationWindow, content_stack: >k::Stac
|
||||
.build();
|
||||
efi_error_header_text.add_css_class("header_sized_text");
|
||||
|
||||
// the header icon for the efi_error icon
|
||||
let efi_error_header_icon = gtk::Image::builder()
|
||||
.icon_name("emblem-error")
|
||||
.halign(gtk::Align::Start)
|
||||
@ -46,9 +35,8 @@ pub fn efi_error_page(window: &adw::ApplicationWindow, content_stack: >k::Stac
|
||||
.margin_end(15)
|
||||
.build();
|
||||
|
||||
// make efi_error selection box for choosing installation or live media
|
||||
let efi_error_selection_box = gtk::Box::builder()
|
||||
.orientation(Orientation::Vertical)
|
||||
.orientation(gtk::Orientation::Vertical)
|
||||
.margin_bottom(15)
|
||||
.margin_top(15)
|
||||
.margin_start(15)
|
||||
@ -59,6 +47,7 @@ pub fn efi_error_page(window: &adw::ApplicationWindow, content_stack: >k::Stac
|
||||
.vexpand(true)
|
||||
.hexpand(true)
|
||||
.label(t!("pika_nowork_csm"))
|
||||
.wrap(true)
|
||||
.halign(gtk::Align::Center)
|
||||
.valign(gtk::Align::Center)
|
||||
.build();
|
||||
@ -72,40 +61,22 @@ pub fn efi_error_page(window: &adw::ApplicationWindow, content_stack: >k::Stac
|
||||
.valign(gtk::Align::Center)
|
||||
.build();
|
||||
|
||||
// / efi_error_selection_box appends
|
||||
|
||||
// / efi_error_header_box appends
|
||||
//// Add the efi_error page header text and icon
|
||||
efi_error_header_box.append(&efi_error_header_text);
|
||||
efi_error_header_box.append(&efi_error_header_icon);
|
||||
|
||||
// / efi_error_main_box appends
|
||||
//// Add the efi_error header to efi_error main box
|
||||
efi_error_main_box.append(&efi_error_header_box);
|
||||
//// Add the efi_error selection/page content box to efi_error main box
|
||||
efi_error_main_box.append(&efi_error_selection_box);
|
||||
|
||||
// Start Appending widgets to boxes
|
||||
|
||||
// / efi_error_selection_box appends
|
||||
//// add live and install media button to efi_error page selections
|
||||
efi_error_selection_box.append(&efi_error_text);
|
||||
efi_error_selection_box.append(&exit_button);
|
||||
|
||||
// / efi_error_header_box appends
|
||||
//// Add the efi_error page header text and icon
|
||||
efi_error_header_box.append(&efi_error_header_text);
|
||||
efi_error_header_box.append(&efi_error_header_icon);
|
||||
|
||||
// / efi_error_main_box appends
|
||||
//// Add the efi_error header to efi_error main box
|
||||
efi_error_main_box.append(&efi_error_header_box);
|
||||
//// Add the efi_error selection/page content box to efi_error main box
|
||||
efi_error_main_box.append(&efi_error_selection_box);
|
||||
main_carousel.append(&efi_error_main_box);
|
||||
|
||||
// / Content stack appends
|
||||
//// Add the efi_error_main_box as page: efi_error_page, Give it nice title
|
||||
content_stack.add_titled(&efi_error_main_box, Some("efi_error_page"), "Welcome");
|
||||
|
||||
exit_button.connect_clicked(clone!(@weak window => move |_| window.close()));
|
||||
exit_button.connect_clicked(clone!(
|
||||
#[weak]
|
||||
window,
|
||||
move |_|
|
||||
window.close()
|
||||
));
|
||||
}
|
||||
|
64
src/main.rs
64
src/main.rs
@ -1,59 +1,41 @@
|
||||
|
||||
// Use libraries
|
||||
use std::env;
|
||||
use crate::build_ui::build_ui;
|
||||
use adw::prelude::*;
|
||||
use adw::*;
|
||||
use gdk::Display;
|
||||
/// Use all gtk4 libraries (gtk4 -> gtk because cargo)
|
||||
/// Use all libadwaita libraries (libadwaita -> adw because cargo)
|
||||
use gtk::{CssProvider, STYLE_PROVIDER_PRIORITY_APPLICATION};
|
||||
|
||||
use gtk::{CssProvider, gdk, STYLE_PROVIDER_PRIORITY_APPLICATION, prelude::*};
|
||||
use gdk::{Display};
|
||||
mod config;
|
||||
use config::{APP_ID};
|
||||
mod build_ui;
|
||||
mod efi_error_page;
|
||||
mod installer_stack_page;
|
||||
|
||||
// Init translations for current crate.
|
||||
#[macro_use]
|
||||
extern crate rust_i18n;
|
||||
i18n!("locales", fallback = "en_US");
|
||||
|
||||
|
||||
mod automatic_partitioning;
|
||||
mod build_ui;
|
||||
mod done_page;
|
||||
mod drive_mount_row;
|
||||
mod efi_error_page;
|
||||
mod eula_page;
|
||||
mod install_page;
|
||||
mod keyboard_page;
|
||||
mod language_page;
|
||||
mod manual_partitioning;
|
||||
mod partitioning_page;
|
||||
mod save_window_size;
|
||||
mod timezone_page;
|
||||
mod welcome_page;
|
||||
|
||||
/// main function
|
||||
fn main() {
|
||||
fn main() -> glib::ExitCode {
|
||||
let current_locale = match env::var_os("LANG") {
|
||||
Some(v) => v.into_string().unwrap(),
|
||||
Some(v) => v.into_string().unwrap().chars()
|
||||
.take_while(|&ch| ch != '.')
|
||||
.collect::<String>(),
|
||||
None => panic!("$LANG is not set"),
|
||||
};
|
||||
rust_i18n::set_locale(current_locale.strip_suffix(".UTF-8").unwrap());
|
||||
let application = adw::Application::new(Some(APP_ID), Default::default());
|
||||
application.connect_startup(|app| {
|
||||
// The CSS "magic" happens here.
|
||||
rust_i18n::set_locale(¤t_locale);
|
||||
|
||||
let app = adw::Application::builder().application_id(config::APP_ID).build();
|
||||
|
||||
app.connect_startup(|app| {
|
||||
load_css();
|
||||
app.connect_activate(build_ui::build_ui);
|
||||
});
|
||||
|
||||
// Run the application
|
||||
app.run()
|
||||
}
|
||||
|
||||
fn load_css() {
|
||||
let provider = CssProvider::new();
|
||||
provider.load_from_string(include_str!("style.css"));
|
||||
// We give the CssProvided to the default screen so the CSS rules we added
|
||||
// can be applied to our window.
|
||||
gtk::style_context_add_provider_for_display(
|
||||
&Display::default().expect("Could not connect to a display."),
|
||||
&provider,
|
||||
STYLE_PROVIDER_PRIORITY_APPLICATION,
|
||||
);
|
||||
app.connect_activate(build_ui);
|
||||
});
|
||||
|
||||
application.run();
|
||||
}
|
114
src2/build_ui.rs
Normal file
114
src2/build_ui.rs
Normal file
@ -0,0 +1,114 @@
|
||||
// Use libraries
|
||||
use adw::prelude::*;
|
||||
use adw::*;
|
||||
use gtk::glib;
|
||||
use gtk::glib::*;
|
||||
/// Use all gtk4 libraries (gtk4 -> gtk because cargo)
|
||||
/// Use all libadwaita libraries (libadwaita -> adw because cargo)
|
||||
use gtk::*;
|
||||
|
||||
use std::path::Path;
|
||||
|
||||
use crate::save_window_size::save_window_size;
|
||||
|
||||
use crate::welcome_page::welcome_page;
|
||||
|
||||
use crate::efi_error_page::efi_error_page;
|
||||
|
||||
use crate::language_page::language_page;
|
||||
|
||||
// build ui function linked to app startup above
|
||||
pub fn build_ui(app: &adw::Application) {
|
||||
// setup glib
|
||||
gtk::glib::set_prgname(Some("pikaos_installer"));
|
||||
glib::set_application_name(&t!("pikaos_installer"));
|
||||
let glib_settings = gio::Settings::new("com.github.pikaos-linux.pikainstallergtk4");
|
||||
|
||||
// Widget Bank
|
||||
|
||||
let _main_box = gtk::Box::builder()
|
||||
// that puts items vertically
|
||||
.orientation(Orientation::Vertical)
|
||||
.build();
|
||||
|
||||
let window_title_bar = adw::HeaderBar::builder().build();
|
||||
|
||||
let content_stack = gtk::Stack::builder()
|
||||
.hexpand(true)
|
||||
.vexpand(true)
|
||||
.transition_type(StackTransitionType::SlideLeftRight)
|
||||
.build();
|
||||
|
||||
let content_stack_switcher = gtk::StackSwitcher::builder()
|
||||
.stack(&content_stack)
|
||||
.margin_top(15)
|
||||
.margin_bottom(15)
|
||||
.margin_start(15)
|
||||
.margin_end(15)
|
||||
.sensitive(false)
|
||||
.build();
|
||||
|
||||
// / _main_box appends
|
||||
//// Add the a title bar to the _main_box
|
||||
_main_box.append(&window_title_bar);
|
||||
//// Add the step indicator to _main_box
|
||||
_main_box.append(&content_stack_switcher);
|
||||
//// Add the stack pager containing all the steps to _main_box
|
||||
_main_box.append(&content_stack);
|
||||
|
||||
let window = adw::ApplicationWindow::builder()
|
||||
// The text on the titlebar
|
||||
.title(t!("pikaos_installer"))
|
||||
// link it to the application "app"
|
||||
.application(app)
|
||||
// Add the box called "_main_box" to it
|
||||
.content(&_main_box)
|
||||
// Application icon
|
||||
.icon_name("calamares")
|
||||
// Get current size from glib
|
||||
.default_width(glib_settings.int("window-width"))
|
||||
.default_height(glib_settings.int("window-height"))
|
||||
// Minimum Size/Default
|
||||
.width_request(700)
|
||||
.height_request(500)
|
||||
// Hide window instead of destroy
|
||||
.hide_on_close(true)
|
||||
//
|
||||
.deletable(false)
|
||||
// Startup
|
||||
.startup_id("pika-installer-gtk4")
|
||||
// build the window
|
||||
.build();
|
||||
|
||||
// Add welcome_page.rs as a page for content_stack
|
||||
if Path::new("/sys/firmware/efi/efivars").exists() {
|
||||
welcome_page(&window, &content_stack);
|
||||
} else {
|
||||
efi_error_page(&window, &content_stack);
|
||||
}
|
||||
|
||||
// bottom_box moved per page
|
||||
// if content_stack visible child becomes NOT content_stack, show the buttom box
|
||||
//content_stack.connect_visible_child_notify(clone!(@weak bottom_box => move |content_stack| {
|
||||
// let state = content_stack.visible_child_name().as_deref() != Some("welcome_page");
|
||||
// bottom_box.set_visible(state);
|
||||
// }));
|
||||
|
||||
// Add language_page.rs as a page for content_stack
|
||||
language_page(&content_stack, &window);
|
||||
|
||||
// glib maximization
|
||||
if glib_settings.boolean("is-maximized") == true {
|
||||
window.maximize()
|
||||
}
|
||||
|
||||
// Connect the hiding of window to the save_window_size function and window destruction
|
||||
window.connect_hide(clone!(@weak window => move |_| save_window_size(&window, &glib_settings)));
|
||||
window.connect_hide(clone!(@weak window => move |_| window.destroy()));
|
||||
// bottom_box moved per page
|
||||
//let content_stack_clone = content_stack.clone();
|
||||
//let content_stack_clone2 = content_stack.clone();
|
||||
//bottom_next_button.connect_clicked(move |_| content_stack_clone.set_visible_child(&content_stack_clone.visible_child().expect("null").next_sibling().unwrap()));
|
||||
//bottom_back_button.connect_clicked(move |_| content_stack_clone2.set_visible_child(&content_stack_clone2.visible_child().expect("null").prev_sibling().unwrap()));
|
||||
window.present();
|
||||
}
|
7
src2/config.rs
Normal file
7
src2/config.rs
Normal file
@ -0,0 +1,7 @@
|
||||
pub const APP_ID: &str = "com.github.pikaos-linux.pikainstallergtk4";
|
||||
//pub const GETTEXT_PACKAGE: &str = env!("CARGO_PKG_NAME");
|
||||
//pub const LOCALEDIR: &str = "/usr/share/locale";
|
||||
//pub const PKGDATADIR: &str = " /usr/share";
|
||||
//pub const RESOURCES_FILE: &str = concat!(@PKGDATADIR@, "/resources.gresource");
|
||||
//pub const VERSION: &str = env!("CARGO_PKG_VERSION");
|
||||
pub const DISTRO_ICON: &str = "pika-logo";
|
111
src2/efi_error_page/mod.rs
Normal file
111
src2/efi_error_page/mod.rs
Normal file
@ -0,0 +1,111 @@
|
||||
|
||||
// Use libraries
|
||||
use adw::prelude::*;
|
||||
use adw::*;
|
||||
use gtk::glib;
|
||||
use gtk::glib::*;
|
||||
/// Use all gtk4 libraries (gtk4 -> gtk because cargo)
|
||||
/// Use all libadwaita libraries (libadwaita -> adw because cargo)
|
||||
use gtk::*;
|
||||
|
||||
|
||||
|
||||
pub fn efi_error_page(window: &adw::ApplicationWindow, content_stack: >k::Stack) {
|
||||
|
||||
// the header box for the efi_error page
|
||||
let efi_error_main_box = gtk::Box::builder()
|
||||
.orientation(Orientation::Vertical)
|
||||
.build();
|
||||
|
||||
// the header box for the efi_error page
|
||||
let efi_error_header_box = gtk::Box::builder()
|
||||
.orientation(Orientation::Horizontal)
|
||||
.build();
|
||||
|
||||
// the header text for the efi_error page
|
||||
let efi_error_header_text = gtk::Label::builder()
|
||||
.label(t!("bad_boot_platfrom"))
|
||||
.halign(gtk::Align::End)
|
||||
.hexpand(true)
|
||||
.margin_top(15)
|
||||
.margin_bottom(15)
|
||||
.margin_start(15)
|
||||
.margin_end(5)
|
||||
.build();
|
||||
efi_error_header_text.add_css_class("header_sized_text");
|
||||
|
||||
// the header icon for the efi_error icon
|
||||
let efi_error_header_icon = gtk::Image::builder()
|
||||
.icon_name("emblem-error")
|
||||
.halign(gtk::Align::Start)
|
||||
.hexpand(true)
|
||||
.pixel_size(78)
|
||||
.margin_top(15)
|
||||
.margin_bottom(15)
|
||||
.margin_start(0)
|
||||
.margin_end(15)
|
||||
.build();
|
||||
|
||||
// make efi_error selection box for choosing installation or live media
|
||||
let efi_error_selection_box = gtk::Box::builder()
|
||||
.orientation(Orientation::Vertical)
|
||||
.margin_bottom(15)
|
||||
.margin_top(15)
|
||||
.margin_start(15)
|
||||
.margin_end(15)
|
||||
.build();
|
||||
|
||||
let efi_error_text = gtk::Label::builder()
|
||||
.vexpand(true)
|
||||
.hexpand(true)
|
||||
.label(t!("pika_nowork_csm"))
|
||||
.halign(gtk::Align::Center)
|
||||
.valign(gtk::Align::Center)
|
||||
.build();
|
||||
efi_error_text.add_css_class("big_error_text");
|
||||
|
||||
let exit_button = gtk::Button::builder()
|
||||
.label(t!("exit"))
|
||||
.vexpand(true)
|
||||
.hexpand(true)
|
||||
.halign(gtk::Align::Center)
|
||||
.valign(gtk::Align::Center)
|
||||
.build();
|
||||
|
||||
// / efi_error_selection_box appends
|
||||
|
||||
// / efi_error_header_box appends
|
||||
//// Add the efi_error page header text and icon
|
||||
efi_error_header_box.append(&efi_error_header_text);
|
||||
efi_error_header_box.append(&efi_error_header_icon);
|
||||
|
||||
// / efi_error_main_box appends
|
||||
//// Add the efi_error header to efi_error main box
|
||||
efi_error_main_box.append(&efi_error_header_box);
|
||||
//// Add the efi_error selection/page content box to efi_error main box
|
||||
efi_error_main_box.append(&efi_error_selection_box);
|
||||
|
||||
// Start Appending widgets to boxes
|
||||
|
||||
// / efi_error_selection_box appends
|
||||
//// add live and install media button to efi_error page selections
|
||||
efi_error_selection_box.append(&efi_error_text);
|
||||
efi_error_selection_box.append(&exit_button);
|
||||
|
||||
// / efi_error_header_box appends
|
||||
//// Add the efi_error page header text and icon
|
||||
efi_error_header_box.append(&efi_error_header_text);
|
||||
efi_error_header_box.append(&efi_error_header_icon);
|
||||
|
||||
// / efi_error_main_box appends
|
||||
//// Add the efi_error header to efi_error main box
|
||||
efi_error_main_box.append(&efi_error_header_box);
|
||||
//// Add the efi_error selection/page content box to efi_error main box
|
||||
efi_error_main_box.append(&efi_error_selection_box);
|
||||
|
||||
// / Content stack appends
|
||||
//// Add the efi_error_main_box as page: efi_error_page, Give it nice title
|
||||
content_stack.add_titled(&efi_error_main_box, Some("efi_error_page"), "Welcome");
|
||||
|
||||
exit_button.connect_clicked(clone!(@weak window => move |_| window.close()));
|
||||
}
|
59
src2/main.rs
Normal file
59
src2/main.rs
Normal file
@ -0,0 +1,59 @@
|
||||
|
||||
// Use libraries
|
||||
use std::env;
|
||||
use crate::build_ui::build_ui;
|
||||
use adw::prelude::*;
|
||||
use adw::*;
|
||||
use gdk::Display;
|
||||
/// Use all gtk4 libraries (gtk4 -> gtk because cargo)
|
||||
/// Use all libadwaita libraries (libadwaita -> adw because cargo)
|
||||
use gtk::{CssProvider, STYLE_PROVIDER_PRIORITY_APPLICATION};
|
||||
|
||||
mod config;
|
||||
use config::{APP_ID};
|
||||
|
||||
// Init translations for current crate.
|
||||
#[macro_use]
|
||||
extern crate rust_i18n;
|
||||
i18n!("locales", fallback = "en_US");
|
||||
|
||||
|
||||
mod automatic_partitioning;
|
||||
mod build_ui;
|
||||
mod done_page;
|
||||
mod drive_mount_row;
|
||||
mod efi_error_page;
|
||||
mod eula_page;
|
||||
mod install_page;
|
||||
mod keyboard_page;
|
||||
mod language_page;
|
||||
mod manual_partitioning;
|
||||
mod partitioning_page;
|
||||
mod save_window_size;
|
||||
mod timezone_page;
|
||||
mod welcome_page;
|
||||
|
||||
/// main function
|
||||
fn main() {
|
||||
let current_locale = match env::var_os("LANG") {
|
||||
Some(v) => v.into_string().unwrap(),
|
||||
None => panic!("$LANG is not set"),
|
||||
};
|
||||
rust_i18n::set_locale(current_locale.strip_suffix(".UTF-8").unwrap());
|
||||
let application = adw::Application::new(Some(APP_ID), Default::default());
|
||||
application.connect_startup(|app| {
|
||||
// The CSS "magic" happens here.
|
||||
let provider = CssProvider::new();
|
||||
provider.load_from_string(include_str!("style.css"));
|
||||
// We give the CssProvided to the default screen so the CSS rules we added
|
||||
// can be applied to our window.
|
||||
gtk::style_context_add_provider_for_display(
|
||||
&Display::default().expect("Could not connect to a display."),
|
||||
&provider,
|
||||
STYLE_PROVIDER_PRIORITY_APPLICATION,
|
||||
);
|
||||
app.connect_activate(build_ui);
|
||||
});
|
||||
|
||||
application.run();
|
||||
}
|
36
src2/style.css
Normal file
36
src2/style.css
Normal file
@ -0,0 +1,36 @@
|
||||
.small_error_text {
|
||||
font-size: 14px;
|
||||
color: red;
|
||||
}
|
||||
|
||||
.small_warn_text {
|
||||
font-size: 14px;
|
||||
color: orange;
|
||||
}
|
||||
|
||||
.small_valid_text {
|
||||
font-size: 14px;
|
||||
color: green;
|
||||
}
|
||||
|
||||
.small_fg_text {
|
||||
font-size: 48px;
|
||||
}
|
||||
|
||||
.big_error_text {
|
||||
font-size: 32px;
|
||||
color: red;
|
||||
}
|
||||
|
||||
.header_sized_text {
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
.medium_sized_text {
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.valid-action {
|
||||
background-color:green;
|
||||
color: white;
|
||||
}
|
Loading…
Reference in New Issue
Block a user