mirror of
https://gitlab.freedesktop.org/dabrain34/GstPipelineStudio.git
synced 2024-11-25 02:21:00 +00:00
app: rework the UI dimension
Add GtkPaned between the logs and the graph Load/save app dimensions.
This commit is contained in:
parent
3731a92d51
commit
9884a776b3
3 changed files with 101 additions and 46 deletions
51
src/app.rs
51
src/app.rs
|
@ -21,8 +21,8 @@ use gtk::gdk::Rectangle;
|
|||
use gtk::prelude::*;
|
||||
use gtk::{
|
||||
gdk::BUTTON_SECONDARY, AboutDialog, Application, ApplicationWindow, Builder, Button,
|
||||
CellRendererText, FileChooserAction, FileChooserDialog, ListStore, PopoverMenu, ResponseType,
|
||||
Statusbar, TreeView, TreeViewColumn, Viewport,
|
||||
CellRendererText, FileChooserAction, FileChooserDialog, ListStore, Paned, PopoverMenu,
|
||||
ResponseType, Statusbar, TreeView, TreeViewColumn, Viewport,
|
||||
};
|
||||
use gtk::{gio, glib, graphene};
|
||||
use once_cell::unsync::OnceCell;
|
||||
|
@ -81,7 +81,19 @@ impl GPSApp {
|
|||
let window: ApplicationWindow = builder.object("mainwindow").expect("Couldn't get window");
|
||||
window.set_application(Some(application));
|
||||
window.set_title(Some("GstPipelineStudio"));
|
||||
window.set_size_request(800, 600);
|
||||
let settings = Settings::load_settings();
|
||||
window.set_size_request(settings.app_width, settings.app_height);
|
||||
let paned: Paned = builder
|
||||
.object("graph_logs-paned")
|
||||
.expect("Couldn't get window");
|
||||
paned.set_position(settings.app_graph_logs_paned_pos);
|
||||
let paned: Paned = builder
|
||||
.object("graph_favorites-paned")
|
||||
.expect("Couldn't get window");
|
||||
paned.set_position(settings.app_graph_favorites_paned_pos);
|
||||
if settings.app_maximized {
|
||||
window.maximize();
|
||||
}
|
||||
let pipeline = Pipeline::new().expect("Unable to initialize the pipeline");
|
||||
let app = GPSApp(Rc::new(GPSAppInner {
|
||||
window,
|
||||
|
@ -120,6 +132,25 @@ impl GPSApp {
|
|||
.borrow_mut()
|
||||
.take()
|
||||
.expect("Shutdown called multiple times");
|
||||
let window: ApplicationWindow = app
|
||||
.builder
|
||||
.object("mainwindow")
|
||||
.expect("Couldn't get window");
|
||||
let mut settings = Settings::load_settings();
|
||||
settings.app_maximized = window.is_maximized();
|
||||
settings.app_width = window.width();
|
||||
settings.app_height = window.height();
|
||||
let paned: Paned = app
|
||||
.builder
|
||||
.object("graph_logs-paned")
|
||||
.expect("Couldn't get window");
|
||||
settings.app_graph_logs_paned_pos = paned.position();
|
||||
let paned: Paned = app
|
||||
.builder
|
||||
.object("graph_favorites-paned")
|
||||
.expect("Couldn't get window");
|
||||
settings.app_graph_favorites_paned_pos = paned.position();
|
||||
Settings::save_settings(&settings);
|
||||
app.drop();
|
||||
});
|
||||
}
|
||||
|
@ -134,10 +165,13 @@ impl GPSApp {
|
|||
ok_button = "Save";
|
||||
action = FileChooserAction::Save;
|
||||
}
|
||||
|
||||
let window: ApplicationWindow = app
|
||||
.builder
|
||||
.object("mainwindow")
|
||||
.expect("Couldn't get window");
|
||||
let file_chooser: FileChooserDialog = FileChooserDialog::new(
|
||||
Some(message),
|
||||
Some(&app.window),
|
||||
Some(&window),
|
||||
action,
|
||||
&[
|
||||
(ok_button, ResponseType::Ok),
|
||||
|
@ -191,6 +225,7 @@ impl GPSApp {
|
|||
dialog.set_resizable(false);
|
||||
dialog.show();
|
||||
}
|
||||
|
||||
fn reset_logger_list(&self, logger_list: &TreeView) {
|
||||
let model = ListStore::new(&[String::static_type()]);
|
||||
logger_list.set_model(Some(&model));
|
||||
|
@ -298,7 +333,11 @@ impl GPSApp {
|
|||
app.reset_favorite_list(&favorite_list);
|
||||
pop_menu.unparent();
|
||||
}));
|
||||
if let Some(application) = app.window.application() {
|
||||
let window: ApplicationWindow = app
|
||||
.builder
|
||||
.object("mainwindow")
|
||||
.expect("Couldn't get window");
|
||||
if let Some(application) = window.application() {
|
||||
application.add_action(&action);
|
||||
}
|
||||
|
||||
|
|
|
@ -231,7 +231,11 @@
|
|||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkPaned">
|
||||
<object class="GtkPaned" id="graph_logs-paned">
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="position">400</property>
|
||||
<child>
|
||||
<object class="GtkPaned" id="graph_favorites-paned">
|
||||
<property name="position">600</property>
|
||||
<property name="position-set">True</property>
|
||||
<property name="hexpand">True</property>
|
||||
|
@ -268,12 +272,13 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow">
|
||||
<property name="valign">end</property>
|
||||
<property name="child">
|
||||
<object class="GtkTreeView" id="logger_list"/>
|
||||
</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkStatusbar" id="status_bar">
|
||||
</object>
|
||||
|
|
|
@ -9,6 +9,11 @@ use crate::logger;
|
|||
#[derive(Debug, Serialize, Deserialize, Default)]
|
||||
pub struct Settings {
|
||||
pub favorites: Vec<String>,
|
||||
pub app_maximized: bool,
|
||||
pub app_width: i32,
|
||||
pub app_height: i32,
|
||||
pub app_graph_logs_paned_pos: i32,
|
||||
pub app_graph_favorites_paned_pos: i32,
|
||||
}
|
||||
|
||||
impl Settings {
|
||||
|
@ -81,7 +86,13 @@ impl Settings {
|
|||
}
|
||||
}
|
||||
} else {
|
||||
Settings::default()
|
||||
Settings {
|
||||
app_width: 800,
|
||||
app_height: 600,
|
||||
app_graph_logs_paned_pos: 400,
|
||||
app_graph_favorites_paned_pos: 600,
|
||||
..Default::default()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue