mirror of
https://github.com/an-anime-team/an-anime-game-launcher.git
synced 2024-11-22 04:46:08 +03:00
Synced project structure with krypt0nn/gtk-example-app
This commit is contained in:
parent
3f3ca086e2
commit
992f1ad02d
8 changed files with 78 additions and 68 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -1,3 +1,3 @@
|
||||||
/target
|
/target
|
||||||
/ui/.dist
|
/assets/ui/.dist
|
||||||
Cargo.lock
|
Cargo.lock
|
||||||
|
|
Before Width: | Height: | Size: 274 KiB After Width: | Height: | Size: 274 KiB |
|
@ -29,7 +29,7 @@ Adw.ApplicationWindow window {
|
||||||
Adw.PreferencesPage {
|
Adw.PreferencesPage {
|
||||||
Adw.PreferencesGroup {
|
Adw.PreferencesGroup {
|
||||||
Gtk.Image {
|
Gtk.Image {
|
||||||
file: "assets/icon.png";
|
file: "assets/images/icon.png";
|
||||||
vexpand: true;
|
vexpand: true;
|
||||||
margin-top: 48;
|
margin-top: 48;
|
||||||
}
|
}
|
|
@ -74,7 +74,7 @@ Gtk.Box preferences {
|
||||||
Gtk.Box {
|
Gtk.Box {
|
||||||
orientation: horizontal;
|
orientation: horizontal;
|
||||||
spacing: 8;
|
spacing: 8;
|
||||||
margin-top: 8;
|
margin-top: 16;
|
||||||
|
|
||||||
Gtk.Button {
|
Gtk.Button {
|
||||||
label: "Revert patch";
|
label: "Revert patch";
|
14
build.rs
14
build.rs
|
@ -1,10 +1,10 @@
|
||||||
use std::process::{Command, Stdio};
|
use std::process::{Command, Stdio};
|
||||||
use std::fs::{self, read_dir, create_dir};
|
use std::fs::{self, read_dir, create_dir_all};
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
|
||||||
fn compile_blueprint<T: ToString>(path: T) -> Result<String, String> {
|
fn compile_blueprint<T: ToString>(path: T) -> Result<String, String> {
|
||||||
// python blueprint-compiler/blueprint-compiler.py compile ui/main.blp
|
// python3 blueprint-compiler/blueprint-compiler.py compile ui/main.blp
|
||||||
let output = Command::new("python")
|
let output = Command::new("python3")
|
||||||
.arg("blueprint-compiler/blueprint-compiler.py")
|
.arg("blueprint-compiler/blueprint-compiler.py")
|
||||||
.arg("compile")
|
.arg("compile")
|
||||||
.arg(path.to_string())
|
.arg(path.to_string())
|
||||||
|
@ -27,9 +27,9 @@ fn compile_blueprint<T: ToString>(path: T) -> Result<String, String> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
if let Ok(entries) = read_dir("ui") {
|
if let Ok(entries) = read_dir("assets/ui") {
|
||||||
if let Err(_) = read_dir("ui/.dist") {
|
if let Err(_) = read_dir("assets/ui/.dist") {
|
||||||
create_dir("ui/.dist").expect("UI dist dir couldn't be created");
|
create_dir_all("assets/ui/.dist").expect("UI dist dir couldn't be created");
|
||||||
}
|
}
|
||||||
|
|
||||||
for entry in entries {
|
for entry in entries {
|
||||||
|
@ -39,7 +39,7 @@ fn main() {
|
||||||
let entry_path = entry.path().to_str().unwrap().to_string();
|
let entry_path = entry.path().to_str().unwrap().to_string();
|
||||||
let entry_filename = entry.file_name().to_str().unwrap().to_string();
|
let entry_filename = entry.file_name().to_str().unwrap().to_string();
|
||||||
|
|
||||||
let entry_dist_path = format!("ui/.dist/{}.ui", &entry_filename[..entry_filename.len() - 4]);
|
let entry_dist_path = format!("assets/ui/.dist/{}.ui", &entry_filename[..entry_filename.len() - 4]);
|
||||||
|
|
||||||
match compile_blueprint(&entry_path) {
|
match compile_blueprint(&entry_path) {
|
||||||
Ok(xml) => {
|
Ok(xml) => {
|
||||||
|
|
62
src/main.rs
62
src/main.rs
|
@ -1,63 +1,9 @@
|
||||||
use gtk4::{self as gtk, prelude::*};
|
use gtk4::{self as gtk, prelude::*};
|
||||||
use libadwaita as adw;
|
use libadwaita::{self as adw, prelude::*};
|
||||||
|
|
||||||
pub mod lib;
|
pub mod ui;
|
||||||
|
|
||||||
struct PreferencesPage {
|
use ui::MainApp;
|
||||||
pub preferences: gtk::Box,
|
|
||||||
pub preferences_go_back: gtk::Button
|
|
||||||
}
|
|
||||||
|
|
||||||
impl PreferencesPage {
|
|
||||||
pub fn new() -> Self {
|
|
||||||
let builder = gtk::Builder::from_string(include_str!("../ui/.dist/preferences.ui"));
|
|
||||||
|
|
||||||
let result = Self {
|
|
||||||
preferences: lib::get_object(&builder, "preferences"),
|
|
||||||
preferences_go_back: lib::get_object(&builder, "preferences_go_back")
|
|
||||||
};
|
|
||||||
|
|
||||||
result
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
struct App {
|
|
||||||
pub window: adw::ApplicationWindow,
|
|
||||||
pub leaflet: adw::Leaflet,
|
|
||||||
pub launch_game: adw::SplitButton,
|
|
||||||
pub open_preferences: gtk::Button
|
|
||||||
}
|
|
||||||
|
|
||||||
impl App {
|
|
||||||
pub fn new(app: >k::Application) -> Self {
|
|
||||||
// Create builder from UI file
|
|
||||||
let builder = gtk::Builder::from_string(include_str!("../ui/.dist/main.ui"));
|
|
||||||
|
|
||||||
// Parse objects from builder
|
|
||||||
let result = Self {
|
|
||||||
window: lib::get_object(&builder, "window"),
|
|
||||||
leaflet: lib::get_object(&builder, "leaflet"),
|
|
||||||
launch_game: lib::get_object(&builder, "launch_game"),
|
|
||||||
open_preferences: lib::get_object(&builder, "open_preferences")
|
|
||||||
};
|
|
||||||
|
|
||||||
// Add preferences page to the leaflet
|
|
||||||
let page = PreferencesPage::new();
|
|
||||||
let leaflet = result.leaflet.clone();
|
|
||||||
|
|
||||||
result.leaflet.append(&page.preferences).set_name(Some("preferences_page"));
|
|
||||||
|
|
||||||
// Go back button for preferences page
|
|
||||||
page.preferences_go_back.connect_clicked(move |_| {
|
|
||||||
leaflet.navigate(adw::NavigationDirection::Back);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Bind app to the window
|
|
||||||
result.window.set_application(Some(app));
|
|
||||||
|
|
||||||
result
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
gtk::init().expect("GTK initialization failed");
|
gtk::init().expect("GTK initialization failed");
|
||||||
|
@ -71,7 +17,7 @@ fn main() {
|
||||||
|
|
||||||
// Init app window and show it
|
// Init app window and show it
|
||||||
application.connect_activate(|app| {
|
application.connect_activate(|app| {
|
||||||
let app = App::new(app);
|
let app = MainApp::new(app);
|
||||||
|
|
||||||
app.open_preferences.connect_clicked(move |_| {
|
app.open_preferences.connect_clicked(move |_| {
|
||||||
app.leaflet.set_visible_child_name("preferences_page");
|
app.leaflet.set_visible_child_name("preferences_page");
|
||||||
|
|
60
src/ui/main.rs
Normal file
60
src/ui/main.rs
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
use gtk4::{self as gtk, prelude::*};
|
||||||
|
use libadwaita::{self as adw, prelude::*};
|
||||||
|
|
||||||
|
use super::get_object;
|
||||||
|
|
||||||
|
pub struct PreferencesPage {
|
||||||
|
pub preferences: gtk::Box,
|
||||||
|
pub preferences_go_back: gtk::Button
|
||||||
|
}
|
||||||
|
|
||||||
|
impl PreferencesPage {
|
||||||
|
pub fn new() -> Self {
|
||||||
|
let builder = gtk::Builder::from_string(include_str!("../../assets/ui/.dist/preferences.ui"));
|
||||||
|
|
||||||
|
let result = Self {
|
||||||
|
preferences: get_object(&builder, "preferences"),
|
||||||
|
preferences_go_back: get_object(&builder, "preferences_go_back")
|
||||||
|
};
|
||||||
|
|
||||||
|
result
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct App {
|
||||||
|
pub window: adw::ApplicationWindow,
|
||||||
|
pub leaflet: adw::Leaflet,
|
||||||
|
pub launch_game: adw::SplitButton,
|
||||||
|
pub open_preferences: gtk::Button
|
||||||
|
}
|
||||||
|
|
||||||
|
impl App {
|
||||||
|
pub fn new(app: >k::Application) -> Self {
|
||||||
|
// Create builder from UI file
|
||||||
|
let builder = gtk::Builder::from_string(include_str!("../../assets/ui/.dist/main.ui"));
|
||||||
|
|
||||||
|
// Parse objects from builder
|
||||||
|
let result = Self {
|
||||||
|
window: get_object(&builder, "window"),
|
||||||
|
leaflet: get_object(&builder, "leaflet"),
|
||||||
|
launch_game: get_object(&builder, "launch_game"),
|
||||||
|
open_preferences: get_object(&builder, "open_preferences")
|
||||||
|
};
|
||||||
|
|
||||||
|
// Add preferences page to the leaflet
|
||||||
|
let page = PreferencesPage::new();
|
||||||
|
let leaflet = result.leaflet.clone();
|
||||||
|
|
||||||
|
result.leaflet.append(&page.preferences).set_name(Some("preferences_page"));
|
||||||
|
|
||||||
|
// Go back button for preferences page
|
||||||
|
page.preferences_go_back.connect_clicked(move |_| {
|
||||||
|
leaflet.navigate(adw::NavigationDirection::Back);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Bind app to the window
|
||||||
|
result.window.set_application(Some(app));
|
||||||
|
|
||||||
|
result
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,9 @@
|
||||||
use gtk4::{self as gtk, prelude::*};
|
use gtk4::{self as gtk, prelude::*};
|
||||||
|
|
||||||
|
mod main;
|
||||||
|
|
||||||
|
pub use main::App as MainApp;
|
||||||
|
|
||||||
/// This function loads object from builder or panics if it doesn't exist
|
/// This function loads object from builder or panics if it doesn't exist
|
||||||
pub fn get_object<T: IsA<gtk::glib::Object>>(builder: >k::Builder, name: &str) -> T {
|
pub fn get_object<T: IsA<gtk::glib::Object>>(builder: >k::Builder, name: &str) -> T {
|
||||||
builder.object::<T>(name).unwrap()
|
builder.object::<T>(name).unwrap()
|
Loading…
Reference in a new issue