add enable/disable input_widgets

This commit is contained in:
ochibani 2025-01-04 18:51:33 +02:00
parent 3258f761d3
commit 3e19d0af31
2 changed files with 53 additions and 26 deletions

View File

@ -9,6 +9,24 @@ pub enum RecordMode {
Window, Window,
} }
#[cfg(feature = "gtk")]
// Disable GtkWidget
pub fn disable_input_widgets(input_widgets: Vec<adw::gtk::Widget>) {
use adw::gtk::prelude::WidgetExt;
for widget in input_widgets {
widget.set_sensitive(false);
}
}
#[cfg(feature = "gtk")]
// Enable GtkWidget
pub fn enable_input_widgets(input_widgets: Vec<adw::gtk::Widget>) {
use adw::gtk::prelude::WidgetExt;
for widget in input_widgets {
widget.set_sensitive(true);
}
}
#[cfg(feature = "gtk")] #[cfg(feature = "gtk")]
// Execute command after finish recording // Execute command after finish recording
pub fn exec(command: &str) -> Result<()> { pub fn exec(command: &str) -> Result<()> {

View File

@ -1,14 +1,15 @@
use adw::{Application, Window}; use adw::{Application, Window};
use adw::gio::File; use adw::gio::File;
use adw::gtk::{AboutDialog, Builder, Button, CheckButton, ComboBoxText, CssProvider, Entry, Expander, FileChooserNative, use adw::gtk::{AboutDialog, Builder, Button, CheckButton, ComboBoxText, CssProvider, Entry, Expander, FileChooserNative,
FileChooserAction, Image, Label, MessageDialog, SpinButton, TextBuffer, TextView, ToggleButton}; FileChooserAction, Image, Label, MessageDialog, SpinButton, TextBuffer, TextView, ToggleButton, Widget};
use adw::prelude::*; use adw::prelude::*;
use anyhow::Result; use anyhow::Result;
#[cfg(any(target_os = "freebsd", target_os = "linux"))] #[cfg(any(target_os = "freebsd", target_os = "linux"))]
use blue_recorder_core::ffmpeg_linux::Ffmpeg; use blue_recorder_core::ffmpeg_linux::Ffmpeg;
#[cfg(target_os = "windows")] #[cfg(target_os = "windows")]
use blue_recorder_core::ffmpeg_windows::Ffmpeg; use blue_recorder_core::ffmpeg_windows::Ffmpeg;
use blue_recorder_core::utils::{is_overwrite, is_wayland, play_record, RecordMode}; use blue_recorder_core::utils::{disable_input_widgets, enable_input_widgets,
is_overwrite, is_wayland, play_record, RecordMode};
use cpal::traits::{DeviceTrait, HostTrait}; use cpal::traits::{DeviceTrait, HostTrait};
use std::cell::RefCell; use std::cell::RefCell;
use std::ops::Add; use std::ops::Add;
@ -690,6 +691,29 @@ fn build_ui(application: &Application, error_dialog: MessageDialog, error_messag
}} }}
}); });
// Input widgets list
let input_widgets: Vec<Widget> = vec![
filename_entry.clone().into(),
folder_chooser_button.clone().into(),
format_chooser_combobox.clone().into(),
area_grab_button.clone().into(),
screen_grab_button.clone().into(),
window_grab_button.clone().into(),
video_switch.clone().into(),
audio_input_switch.clone().into(),
frames_spin.clone().into(),
mouse_switch.clone().into(),
follow_mouse_switch.clone().into(),
delay_spin.clone().into(),
hide_switch.clone().into(),
audio_output_switch.clone().into(),
video_bitrate_spin.clone().into(),
area_switch.clone().into(),
audio_bitrate_spin.clone().into(),
audio_source_combobox.clone().into(),
command_entry.clone().into()
];
// Record struct values // Record struct values
let audio_output_id = if audio_output_switch.is_active() { let audio_output_id = if audio_output_switch.is_active() {
output_device output_device
@ -774,6 +798,7 @@ fn build_ui(application: &Application, error_dialog: MessageDialog, error_messag
let _delay_window_button = delay_window_button.clone(); let _delay_window_button = delay_window_button.clone();
let _error_dialog = error_dialog.clone(); let _error_dialog = error_dialog.clone();
let _error_message = error_message.clone(); let _error_message = error_message.clone();
let _input_widgets = input_widgets.clone();
//let main_context = glib::MainContext::default(); //let main_context = glib::MainContext::default();
let _main_window = main_window.clone(); let _main_window = main_window.clone();
let _play_button = play_button.clone(); let _play_button = play_button.clone();
@ -825,9 +850,7 @@ fn build_ui(application: &Application, error_dialog: MessageDialog, error_messag
} }
} else if _delay_spin.value() as u16 == 0 && !is_wayland() { } else if _delay_spin.value() as u16 == 0 && !is_wayland() {
let _area_capture = area_capture.borrow_mut(); let _area_capture = area_capture.borrow_mut();
_audio_input_switch.set_sensitive(false); disable_input_widgets(_input_widgets.clone());
_audio_output_switch.set_sensitive(false);
_video_switch.set_sensitive(false);
start_timer(record_time_label.clone()); start_timer(record_time_label.clone());
record_time_label.set_visible(true); record_time_label.set_visible(true);
if hide_switch.is_active() { if hide_switch.is_active() {
@ -842,9 +865,7 @@ fn build_ui(application: &Application, error_dialog: MessageDialog, error_messag
// Do nothing // Do nothing
}, },
Err(error) => { Err(error) => {
_audio_input_switch.set_sensitive(true); enable_input_widgets(_input_widgets.clone());
_audio_output_switch.set_sensitive(true);
_video_switch.set_sensitive(true);
_record_button.show(); _record_button.show();
_stop_button.hide(); _stop_button.hide();
let text_buffer = TextBuffer::new(None); let text_buffer = TextBuffer::new(None);
@ -860,9 +881,7 @@ fn build_ui(application: &Application, error_dialog: MessageDialog, error_messag
// Do nothing // Do nothing
}, },
Err(error) => { Err(error) => {
_audio_input_switch.set_sensitive(true); enable_input_widgets(_input_widgets.clone());
_audio_output_switch.set_sensitive(true);
_video_switch.set_sensitive(true);
_record_button.show(); _record_button.show();
_stop_button.hide(); _stop_button.hide();
let text_buffer = TextBuffer::new(None); let text_buffer = TextBuffer::new(None);
@ -884,9 +903,7 @@ fn build_ui(application: &Application, error_dialog: MessageDialog, error_messag
// Do nothing // Do nothing
}, },
Err(error) => { Err(error) => {
_audio_input_switch.set_sensitive(true); enable_input_widgets(_input_widgets.clone());
_audio_output_switch.set_sensitive(true);
_video_switch.set_sensitive(true);
_record_button.show(); _record_button.show();
_stop_button.hide(); _stop_button.hide();
let text_buffer = TextBuffer::new(None); let text_buffer = TextBuffer::new(None);
@ -922,9 +939,7 @@ fn build_ui(application: &Application, error_dialog: MessageDialog, error_messag
// Do nothing // Do nothing
}, },
Err(error) => { Err(error) => {
_audio_input_switch.set_sensitive(true); enable_input_widgets(input_widgets.clone());
_audio_output_switch.set_sensitive(true);
_video_switch.set_sensitive(true);
record_button.show(); record_button.show();
_stop_button.hide(); _stop_button.hide();
let text_buffer = TextBuffer::new(None); let text_buffer = TextBuffer::new(None);
@ -940,9 +955,7 @@ fn build_ui(application: &Application, error_dialog: MessageDialog, error_messag
// Do nothing // Do nothing
}, },
Err(error) => { Err(error) => {
_audio_input_switch.set_sensitive(true); enable_input_widgets(input_widgets.clone());
_audio_output_switch.set_sensitive(true);
_video_switch.set_sensitive(true);
record_button.show(); record_button.show();
_stop_button.hide(); _stop_button.hide();
let text_buffer = TextBuffer::new(None); let text_buffer = TextBuffer::new(None);
@ -958,9 +971,7 @@ fn build_ui(application: &Application, error_dialog: MessageDialog, error_messag
// Do nothing // Do nothing
}, },
Err(error) => { Err(error) => {
_audio_input_switch.set_sensitive(true); enable_input_widgets(input_widgets.clone());
_audio_output_switch.set_sensitive(true);
_video_switch.set_sensitive(true);
record_button.show(); record_button.show();
_stop_button.hide(); _stop_button.hide();
let text_buffer = TextBuffer::new(None); let text_buffer = TextBuffer::new(None);
@ -970,9 +981,7 @@ fn build_ui(application: &Application, error_dialog: MessageDialog, error_messag
}, },
} }
} }
_audio_input_switch.set_sensitive(true); enable_input_widgets(input_widgets.clone());
_audio_output_switch.set_sensitive(true);
_video_switch.set_sensitive(true);
record_button.show(); record_button.show();
_stop_button.hide(); _stop_button.hide();
let file_name = _ffmpeg_record_interface.borrow_mut().saved_filename.clone(); let file_name = _ffmpeg_record_interface.borrow_mut().saved_filename.clone();