RR: Create DriveMountPoint Row widget
This commit is contained in:
parent
5af8f03011
commit
fea499f938
@ -1,75 +0,0 @@
|
||||
use gtk::glib;
|
||||
use gtk::*;
|
||||
use gtk::prelude::*;
|
||||
use gtk::subclass::prelude::*;
|
||||
use adw::subclass::prelude::*;
|
||||
use adw::prelude::ActionRowExt;
|
||||
use std::cell::{Cell, RefCell};
|
||||
use glib::ObjectExt;
|
||||
use gtk::Orientation::Horizontal;
|
||||
use glib::GString;
|
||||
|
||||
// Object holding the state
|
||||
#[derive(glib::Properties, Default)]
|
||||
#[properties(wrapper_type = super::CustomButton)]
|
||||
pub struct CustomButton {
|
||||
#[property(get, set)]
|
||||
filesystem: RefCell<String>,
|
||||
partition: RefCell<String>,
|
||||
mountpoint: RefCell<String>,
|
||||
partition_scroll: gtk::ScrolledWindow
|
||||
}
|
||||
|
||||
// The central trait for subclassing a GObject
|
||||
#[glib::object_subclass]
|
||||
impl ObjectSubclass for CustomButton {
|
||||
const NAME: &'static str = "MyGtkAppCustomButton";
|
||||
type Type = super::CustomButton;
|
||||
type ParentType = adw::ActionRow;
|
||||
}
|
||||
|
||||
// Trait shared by all GObjects
|
||||
// Trait shared by all GObjects
|
||||
#[glib::derived_properties]
|
||||
impl ObjectImpl for CustomButton {
|
||||
fn constructed(&self) {
|
||||
self.parent_constructed();
|
||||
|
||||
// Bind label to number
|
||||
// `SYNC_CREATE` ensures that the label will be immediately set
|
||||
let obj = self.obj();
|
||||
let action_row_content_box = gtk::Box::builder()
|
||||
.orientation(Horizontal)
|
||||
.spacing(0)
|
||||
.build();
|
||||
|
||||
let partition_row_expander = adw::ExpanderRow::builder()
|
||||
.title("Partition")
|
||||
.build();
|
||||
|
||||
action_row_content_box.append(&partition_row_expander);
|
||||
|
||||
obj.add_prefix(&action_row_content_box)
|
||||
|
||||
//obj.bind_property("number", obj.as_ref(), "label")
|
||||
// .sync_create()
|
||||
// .build();
|
||||
}
|
||||
}
|
||||
|
||||
// Trait shared by all widgets
|
||||
impl WidgetImpl for CustomButton {}
|
||||
|
||||
// Trait shared by all buttons
|
||||
// Trait shared by all buttons
|
||||
|
||||
impl ListBoxRowImpl for CustomButton {}
|
||||
|
||||
impl PreferencesRowImpl for CustomButton {}
|
||||
|
||||
impl ActionRowImpl for CustomButton {
|
||||
//fn clicked(&self) {
|
||||
// let incremented_number = self.obj().number() + 1;
|
||||
// self.obj().set_number(incremented_number);
|
||||
//}
|
||||
}
|
179
src/drive_mount_row/imp.rs
Normal file
179
src/drive_mount_row/imp.rs
Normal file
@ -0,0 +1,179 @@
|
||||
use std::{
|
||||
cell::{
|
||||
Cell,
|
||||
RefCell,
|
||||
},
|
||||
sync::{
|
||||
OnceLock,
|
||||
},
|
||||
rc::{
|
||||
Rc,
|
||||
},
|
||||
};
|
||||
|
||||
use glib::{
|
||||
Properties,
|
||||
subclass::Signal,
|
||||
clone,
|
||||
};
|
||||
use gtk::{
|
||||
glib,
|
||||
prelude::*,
|
||||
subclass::prelude::*,
|
||||
*,
|
||||
Orientation::Horizontal,
|
||||
};
|
||||
use adw::{
|
||||
prelude::*,
|
||||
subclass::prelude::*,
|
||||
*,
|
||||
};
|
||||
|
||||
|
||||
// ANCHOR: custom_button
|
||||
// Object holding the state
|
||||
#[derive(Properties, Default)]
|
||||
#[properties(wrapper_type = super::DriveMountRow)]
|
||||
pub struct DriveMountRow {
|
||||
#[property(get, set)]
|
||||
mountopt: RefCell<String>,
|
||||
#[property(get, set)]
|
||||
partition: RefCell<String>,
|
||||
#[property(get, set)]
|
||||
mountpoint: RefCell<String>,
|
||||
#[property(get, set)]
|
||||
partition_scroll: Rc<RefCell<gtk::ScrolledWindow>>,
|
||||
}
|
||||
// ANCHOR_END: custom_button
|
||||
|
||||
// The central trait for subclassing a GObject
|
||||
#[glib::object_subclass]
|
||||
impl ObjectSubclass for DriveMountRow {
|
||||
const NAME: &'static str = "DriveMountRow";
|
||||
type Type = super::DriveMountRow;
|
||||
type ParentType = adw::ActionRow;
|
||||
}
|
||||
|
||||
// ANCHOR: object_impl
|
||||
// Trait shared by all GObjects
|
||||
#[glib::derived_properties]
|
||||
impl ObjectImpl for DriveMountRow {
|
||||
fn signals() -> &'static [Signal] {
|
||||
static SIGNALS: OnceLock<Vec<Signal>> = OnceLock::new();
|
||||
SIGNALS.get_or_init(|| {
|
||||
vec![Signal::builder("row-deleted")
|
||||
.build()]
|
||||
})
|
||||
}
|
||||
fn constructed(&self) {
|
||||
self.parent_constructed();
|
||||
|
||||
// Bind label to number
|
||||
// `SYNC_CREATE` ensures that the label will be immediately set
|
||||
let obj = self.obj();
|
||||
let action_row_content_box = gtk::Box::builder()
|
||||
.orientation(Horizontal)
|
||||
.spacing(0)
|
||||
.build();
|
||||
|
||||
let partition_row_expander_adw_listbox = gtk::ListBox::builder()
|
||||
.margin_end(5)
|
||||
.margin_start(5)
|
||||
.margin_top(5)
|
||||
.margin_bottom(5)
|
||||
.build();
|
||||
partition_row_expander_adw_listbox.add_css_class("boxed-list");
|
||||
|
||||
let partition_row_expander = adw::ExpanderRow::builder()
|
||||
.subtitle("Partition")
|
||||
.build();
|
||||
|
||||
let mountpoint_entry_adw_listbox = gtk::ListBox::builder()
|
||||
.halign(gtk::Align::Center)
|
||||
.margin_top(5)
|
||||
.margin_bottom(5)
|
||||
.build();
|
||||
mountpoint_entry_adw_listbox.add_css_class("boxed-list");
|
||||
|
||||
let mountpoint_entry_row = adw::EntryRow::builder()
|
||||
.title("Mountpoint")
|
||||
.build();
|
||||
|
||||
let mountopt_entry_adw_listbox = gtk::ListBox::builder()
|
||||
.margin_top(5)
|
||||
.margin_bottom(5)
|
||||
.margin_start(5)
|
||||
.halign(gtk::Align::Center)
|
||||
.build();
|
||||
mountopt_entry_adw_listbox.add_css_class("boxed-list");
|
||||
|
||||
let mountopt_entry_row = adw::EntryRow::builder()
|
||||
.title("Additional Mount Options")
|
||||
.build();
|
||||
|
||||
let partition_row_delete_button = gtk::Button::builder()
|
||||
.margin_end(5)
|
||||
.margin_start(5)
|
||||
.margin_top(5)
|
||||
.margin_bottom(5)
|
||||
.height_request(60)
|
||||
.width_request(60)
|
||||
.icon_name("edit-delete")
|
||||
.halign(gtk::Align::End)
|
||||
.build();
|
||||
|
||||
partition_row_delete_button.connect_clicked(clone!( @weak obj => move |_| {
|
||||
obj.emit_by_name::<()>("row-deleted", &[]);
|
||||
}));
|
||||
|
||||
partition_row_expander_adw_listbox.append(&partition_row_expander);
|
||||
action_row_content_box.append(&partition_row_expander_adw_listbox);
|
||||
|
||||
mountpoint_entry_adw_listbox.append(&mountpoint_entry_row);
|
||||
action_row_content_box.append(&mountpoint_entry_adw_listbox);
|
||||
|
||||
mountopt_entry_adw_listbox.append(&mountopt_entry_row);
|
||||
action_row_content_box.append(&mountopt_entry_adw_listbox);
|
||||
|
||||
action_row_content_box.append(&partition_row_delete_button);
|
||||
|
||||
|
||||
obj.add_prefix(&action_row_content_box);
|
||||
|
||||
// Bind label to number
|
||||
// `SYNC_CREATE` ensures that the label will be immediately set
|
||||
let obj = self.obj();
|
||||
obj.bind_property("partition", &partition_row_expander, "title")
|
||||
.sync_create()
|
||||
.bidirectional()
|
||||
.build();
|
||||
|
||||
obj.bind_property("mountpoint", &mountpoint_entry_row, "text")
|
||||
.sync_create()
|
||||
.bidirectional()
|
||||
.build();
|
||||
|
||||
obj.bind_property("mountopt", &mountopt_entry_row, "text")
|
||||
.sync_create()
|
||||
.bidirectional()
|
||||
.build();
|
||||
|
||||
partition_row_expander.add_row(&obj.property::<gtk::ScrolledWindow>("partition_scroll"));
|
||||
}
|
||||
}
|
||||
// Trait shared by all widgets
|
||||
impl WidgetImpl for DriveMountRow {}
|
||||
|
||||
// Trait shared by all buttons
|
||||
// Trait shared by all buttons
|
||||
|
||||
impl ListBoxRowImpl for DriveMountRow {}
|
||||
|
||||
impl PreferencesRowImpl for DriveMountRow {}
|
||||
|
||||
impl ActionRowImpl for DriveMountRow {
|
||||
//fn clicked(&self) {
|
||||
// let incremented_number = self.obj().number() + 1;
|
||||
// self.obj().set_number(incremented_number);
|
||||
//}
|
||||
}
|
@ -2,16 +2,21 @@ mod imp;
|
||||
|
||||
use glib::Object;
|
||||
use gtk::glib;
|
||||
use gtk::ListBoxRow;
|
||||
|
||||
glib::wrapper! {
|
||||
pub struct CustomButton(ObjectSubclass<imp::CustomButton>)
|
||||
pub struct DriveMountRow(ObjectSubclass<imp::DriveMountRow>)
|
||||
@extends adw::ActionRow, gtk::Widget, gtk::ListBoxRow, adw::PreferencesRow,
|
||||
@implements gtk::Accessible, gtk::Actionable, gtk::Buildable, gtk::ConstraintTarget;
|
||||
}
|
||||
|
||||
impl CustomButton {
|
||||
impl DriveMountRow {
|
||||
pub fn new() -> Self {
|
||||
Object::builder().build()
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for DriveMountRow {
|
||||
fn default() -> Self {
|
||||
Self::new()
|
||||
}
|
||||
}
|
@ -22,7 +22,7 @@ mod install_page;
|
||||
mod done_page;
|
||||
mod automatic_partitioning;
|
||||
mod manual_partitioning;
|
||||
mod custom_button;
|
||||
mod drive_mount_row;
|
||||
|
||||
/// main function
|
||||
fn main() {
|
||||
|
@ -22,7 +22,7 @@ use std::time::*;
|
||||
|
||||
use std::fs;
|
||||
use std::path::Path;
|
||||
use crate::custom_button::CustomButton;
|
||||
use crate::drive_mount_row::DriveMountRow;
|
||||
|
||||
fn create_mount_row_list_box(device: &str) -> ActionRow {
|
||||
// Create check button
|
||||
@ -223,13 +223,26 @@ pub fn manual_partitioning(window: &adw::ApplicationWindow, partitioning_stack:
|
||||
partition_method_manual_main_box.append(&partition_method_manual_efi_error_label);
|
||||
partition_method_manual_main_box.append(&partition_method_manual_gparted_button);
|
||||
|
||||
let shit_button = CustomButton::new();
|
||||
let shit_button = DriveMountRow::new();
|
||||
|
||||
shit_button.set_title("haggar");
|
||||
shit_button.set_property("partition", "KAM");
|
||||
shit_button.set_property("mountpoint", "KAM");
|
||||
shit_button.set_property("mountopt", "KAM");
|
||||
shit_button.set_property("partition_scroll", >k::ScrolledWindow::new());
|
||||
|
||||
let create_mount_row_list_box = gtk::ListBox::builder()
|
||||
.build();
|
||||
|
||||
let partition_method_manual_main_box_clone = partition_method_manual_main_box.clone();
|
||||
|
||||
shit_button.connect_closure(
|
||||
"row-deleted",
|
||||
false,
|
||||
closure_local!(move |_shit_button: DriveMountRow| {
|
||||
partition_method_manual_main_box_clone.remove(&_shit_button)
|
||||
}),
|
||||
);
|
||||
|
||||
//shit_button.connect_clicked(clone!(@weak create_mount_row_list_box => move |_|{
|
||||
// create_mount_row_list_box.append(&create_mount_row("col"))
|
||||
//}));
|
||||
|
Loading…
Reference in New Issue
Block a user