Add option to open folders by double right click (#128)
This commit is contained in:
parent
f282b41a37
commit
865543c7d7
|
@ -181,6 +181,43 @@ Author: Rafał Mikrut
|
||||||
<placeholder/>
|
<placeholder/>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
<object class="GtkPopover" id="popover_right_click">
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="position">left</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="orientation">vertical</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="buttons_popover_right_click_open_file">
|
||||||
|
<property name="label" translatable="yes">Open File</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="receives_default">True</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="buttons_popover_right_click_open_folder">
|
||||||
|
<property name="label" translatable="yes">Open Folder</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="receives_default">True</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
<object class="GtkPopover" id="popover_select_duplicate">
|
<object class="GtkPopover" id="popover_select_duplicate">
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<child>
|
<child>
|
||||||
|
|
|
@ -81,8 +81,6 @@ pub fn connect_button_search(
|
||||||
let progress_bar_all_stages = gui_data.progress_bar_all_stages.clone();
|
let progress_bar_all_stages = gui_data.progress_bar_all_stages.clone();
|
||||||
let image_preview_similar_images = gui_data.image_preview_similar_images.clone();
|
let image_preview_similar_images = gui_data.image_preview_similar_images.clone();
|
||||||
|
|
||||||
let show_dialog = Arc::new(AtomicBool::new(true));
|
|
||||||
|
|
||||||
buttons_search_clone.connect_clicked(move |_| {
|
buttons_search_clone.connect_clicked(move |_| {
|
||||||
let included_directories = get_string_from_list_store(&scrolled_window_included_directories);
|
let included_directories = get_string_from_list_store(&scrolled_window_included_directories);
|
||||||
let excluded_directories = get_string_from_list_store(&scrolled_window_excluded_directories);
|
let excluded_directories = get_string_from_list_store(&scrolled_window_excluded_directories);
|
||||||
|
@ -90,6 +88,8 @@ pub fn connect_button_search(
|
||||||
let excluded_items = entry_excluded_items.get_text().as_str().to_string();
|
let excluded_items = entry_excluded_items.get_text().as_str().to_string();
|
||||||
let allowed_extensions = entry_allowed_extensions.get_text().as_str().to_string();
|
let allowed_extensions = entry_allowed_extensions.get_text().as_str().to_string();
|
||||||
|
|
||||||
|
let show_dialog = Arc::new(AtomicBool::new(true));
|
||||||
|
|
||||||
hide_all_buttons(&buttons_array);
|
hide_all_buttons(&buttons_array);
|
||||||
|
|
||||||
// Disable main notebook from any iteration until search will end
|
// Disable main notebook from any iteration until search will end
|
||||||
|
|
|
@ -1,77 +1,113 @@
|
||||||
use crate::help_functions::*;
|
use crate::help_functions::*;
|
||||||
use gtk::prelude::*;
|
use gtk::prelude::*;
|
||||||
|
|
||||||
|
// TODO add option to open files and folders from context menu activated by pressing ONCE with right mouse button
|
||||||
|
|
||||||
pub fn opening_double_click_function_duplicates(tree_view: >k::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
|
pub fn opening_double_click_function_duplicates(tree_view: >k::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
|
||||||
if event.get_event_type() == gdk::EventType::DoubleButtonPress {
|
if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 {
|
||||||
common_open_function(tree_view, ColumnsDuplicates::Name as i32, ColumnsDuplicates::Path as i32);
|
common_open_function(tree_view, ColumnsDuplicates::Name as i32, ColumnsDuplicates::Path as i32, OpenMode::PathAndName);
|
||||||
|
} else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 {
|
||||||
|
common_open_function(tree_view, ColumnsDuplicates::Name as i32, ColumnsDuplicates::Path as i32, OpenMode::OnlyPath);
|
||||||
}
|
}
|
||||||
gtk::Inhibit(false)
|
gtk::Inhibit(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn opening_double_click_function_empty_folders(tree_view: >k::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
|
pub fn opening_double_click_function_empty_folders(tree_view: >k::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
|
||||||
if event.get_event_type() == gdk::EventType::DoubleButtonPress {
|
if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 {
|
||||||
common_open_function(tree_view, ColumnsEmptyFolders::Name as i32, ColumnsEmptyFolders::Path as i32);
|
common_open_function(tree_view, ColumnsEmptyFolders::Name as i32, ColumnsEmptyFolders::Path as i32, OpenMode::PathAndName);
|
||||||
|
} else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 {
|
||||||
|
common_open_function(tree_view, ColumnsEmptyFolders::Name as i32, ColumnsEmptyFolders::Path as i32, OpenMode::OnlyPath);
|
||||||
}
|
}
|
||||||
gtk::Inhibit(false)
|
gtk::Inhibit(false)
|
||||||
}
|
}
|
||||||
pub fn opening_double_click_function_empty_files(tree_view: >k::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
|
pub fn opening_double_click_function_empty_files(tree_view: >k::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
|
||||||
if event.get_event_type() == gdk::EventType::DoubleButtonPress {
|
if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 {
|
||||||
common_open_function(tree_view, ColumnsEmptyFiles::Name as i32, ColumnsEmptyFiles::Path as i32);
|
common_open_function(tree_view, ColumnsEmptyFiles::Name as i32, ColumnsEmptyFiles::Path as i32, OpenMode::PathAndName);
|
||||||
|
} else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 {
|
||||||
|
common_open_function(tree_view, ColumnsEmptyFiles::Name as i32, ColumnsEmptyFiles::Path as i32, OpenMode::OnlyPath);
|
||||||
}
|
}
|
||||||
gtk::Inhibit(false)
|
gtk::Inhibit(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn opening_double_click_function_temporary_files(tree_view: >k::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
|
pub fn opening_double_click_function_temporary_files(tree_view: >k::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
|
||||||
if event.get_event_type() == gdk::EventType::DoubleButtonPress {
|
if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 {
|
||||||
common_open_function(tree_view, ColumnsTemporaryFiles::Name as i32, ColumnsTemporaryFiles::Path as i32);
|
common_open_function(tree_view, ColumnsTemporaryFiles::Name as i32, ColumnsTemporaryFiles::Path as i32, OpenMode::PathAndName);
|
||||||
|
} else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 {
|
||||||
|
common_open_function(tree_view, ColumnsTemporaryFiles::Name as i32, ColumnsTemporaryFiles::Path as i32, OpenMode::OnlyPath);
|
||||||
}
|
}
|
||||||
gtk::Inhibit(false)
|
gtk::Inhibit(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn opening_double_click_function_big_files(tree_view: >k::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
|
pub fn opening_double_click_function_big_files(tree_view: >k::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
|
||||||
if event.get_event_type() == gdk::EventType::DoubleButtonPress {
|
if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 {
|
||||||
common_open_function(tree_view, ColumnsBigFiles::Name as i32, ColumnsBigFiles::Path as i32);
|
common_open_function(tree_view, ColumnsBigFiles::Name as i32, ColumnsBigFiles::Path as i32, OpenMode::PathAndName);
|
||||||
|
} else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 {
|
||||||
|
common_open_function(tree_view, ColumnsBigFiles::Name as i32, ColumnsBigFiles::Path as i32, OpenMode::OnlyPath);
|
||||||
}
|
}
|
||||||
gtk::Inhibit(false)
|
gtk::Inhibit(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn opening_double_click_function_zeroed_files(tree_view: >k::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
|
pub fn opening_double_click_function_zeroed_files(tree_view: >k::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
|
||||||
if event.get_event_type() == gdk::EventType::DoubleButtonPress {
|
if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 {
|
||||||
common_open_function(tree_view, ColumnsZeroedFiles::Name as i32, ColumnsZeroedFiles::Path as i32);
|
common_open_function(tree_view, ColumnsZeroedFiles::Name as i32, ColumnsZeroedFiles::Path as i32, OpenMode::PathAndName);
|
||||||
|
} else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 {
|
||||||
|
common_open_function(tree_view, ColumnsZeroedFiles::Name as i32, ColumnsZeroedFiles::Path as i32, OpenMode::OnlyPath);
|
||||||
}
|
}
|
||||||
gtk::Inhibit(false)
|
gtk::Inhibit(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn opening_double_click_function_same_music(tree_view: >k::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
|
pub fn opening_double_click_function_same_music(tree_view: >k::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
|
||||||
if event.get_event_type() == gdk::EventType::DoubleButtonPress {
|
if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 {
|
||||||
common_open_function(tree_view, ColumnsSameMusic::Name as i32, ColumnsSameMusic::Path as i32);
|
common_open_function(tree_view, ColumnsSameMusic::Name as i32, ColumnsSameMusic::Path as i32, OpenMode::PathAndName);
|
||||||
|
} else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 {
|
||||||
|
common_open_function(tree_view, ColumnsSameMusic::Name as i32, ColumnsSameMusic::Path as i32, OpenMode::OnlyPath);
|
||||||
}
|
}
|
||||||
gtk::Inhibit(false)
|
gtk::Inhibit(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn opening_double_click_function_similar_images(tree_view: >k::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
|
pub fn opening_double_click_function_similar_images(tree_view: >k::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
|
||||||
if event.get_event_type() == gdk::EventType::DoubleButtonPress {
|
if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 {
|
||||||
common_open_function(tree_view, ColumnsSimilarImages::Name as i32, ColumnsSimilarImages::Path as i32);
|
common_open_function(tree_view, ColumnsSimilarImages::Name as i32, ColumnsSimilarImages::Path as i32, OpenMode::PathAndName);
|
||||||
|
} else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 {
|
||||||
|
common_open_function(tree_view, ColumnsSimilarImages::Name as i32, ColumnsSimilarImages::Path as i32, OpenMode::OnlyPath);
|
||||||
}
|
}
|
||||||
gtk::Inhibit(false)
|
gtk::Inhibit(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn opening_double_click_function_invalid_symlinks(tree_view: >k::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
|
pub fn opening_double_click_function_invalid_symlinks(tree_view: >k::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
|
||||||
if event.get_event_type() == gdk::EventType::DoubleButtonPress {
|
if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 {
|
||||||
common_open_function(tree_view, ColumnsInvalidSymlinks::Name as i32, ColumnsInvalidSymlinks::Path as i32);
|
common_open_function(tree_view, ColumnsInvalidSymlinks::Name as i32, ColumnsInvalidSymlinks::Path as i32, OpenMode::PathAndName);
|
||||||
|
} else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 {
|
||||||
|
common_open_function(tree_view, ColumnsInvalidSymlinks::Name as i32, ColumnsInvalidSymlinks::Path as i32, OpenMode::OnlyPath);
|
||||||
}
|
}
|
||||||
gtk::Inhibit(false)
|
gtk::Inhibit(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn common_open_function(tree_view: >k::TreeView, column_name: i32, column_path: i32) {
|
pub enum OpenMode {
|
||||||
|
OnlyPath,
|
||||||
|
PathAndName,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn common_open_function(tree_view: >k::TreeView, column_name: i32, column_path: i32, opening_mode: OpenMode) {
|
||||||
let selection = tree_view.get_selection();
|
let selection = tree_view.get_selection();
|
||||||
let (selection_rows, tree_model) = selection.get_selected_rows();
|
let (selection_rows, tree_model) = selection.get_selected_rows();
|
||||||
|
|
||||||
for tree_path in selection_rows.iter().rev() {
|
for tree_path in selection_rows.iter().rev() {
|
||||||
|
let end_path;
|
||||||
let name = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), column_name).get::<String>().unwrap().unwrap();
|
let name = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), column_name).get::<String>().unwrap().unwrap();
|
||||||
let path = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), column_path).get::<String>().unwrap().unwrap();
|
let path = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), column_path).get::<String>().unwrap().unwrap();
|
||||||
|
|
||||||
if open::that(format!("{}/{}", path, name)).is_err() {
|
match opening_mode {
|
||||||
println!("Failed to open {}/{}", path, name);
|
OpenMode::OnlyPath => {
|
||||||
|
end_path = path;
|
||||||
|
}
|
||||||
|
OpenMode::PathAndName => {
|
||||||
|
end_path = format!("{}/{}", path, name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if open::that(&end_path).is_err() {
|
||||||
|
println!("Failed to open {}", end_path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -89,10 +89,14 @@ pub struct GuiData {
|
||||||
pub buttons_popover_very_simple_list_unselect_all: gtk::Button,
|
pub buttons_popover_very_simple_list_unselect_all: gtk::Button,
|
||||||
pub buttons_popover_very_simple_list_reverse: gtk::Button,
|
pub buttons_popover_very_simple_list_reverse: gtk::Button,
|
||||||
|
|
||||||
|
pub buttons_popover_right_click_open_file: gtk::Button,
|
||||||
|
pub buttons_popover_right_click_open_folder: gtk::Button,
|
||||||
|
|
||||||
//// Popovers
|
//// Popovers
|
||||||
pub popover_select_duplicate: gtk::Popover,
|
pub popover_select_duplicate: gtk::Popover,
|
||||||
pub popover_select_simple_list: gtk::Popover,
|
pub popover_select_simple_list: gtk::Popover,
|
||||||
pub popover_select_very_simple_list: gtk::Popover,
|
pub popover_select_very_simple_list: gtk::Popover,
|
||||||
|
pub popover_right_click: gtk::Popover,
|
||||||
|
|
||||||
//// Check Buttons
|
//// Check Buttons
|
||||||
pub check_button_recursive: gtk::CheckButton,
|
pub check_button_recursive: gtk::CheckButton,
|
||||||
|
@ -302,10 +306,14 @@ impl GuiData {
|
||||||
let buttons_popover_very_simple_list_unselect_all: gtk::Button = builder.get_object("buttons_popover_very_simple_list_unselect_all").unwrap();
|
let buttons_popover_very_simple_list_unselect_all: gtk::Button = builder.get_object("buttons_popover_very_simple_list_unselect_all").unwrap();
|
||||||
let buttons_popover_very_simple_list_reverse: gtk::Button = builder.get_object("buttons_popover_very_simple_list_reverse").unwrap();
|
let buttons_popover_very_simple_list_reverse: gtk::Button = builder.get_object("buttons_popover_very_simple_list_reverse").unwrap();
|
||||||
|
|
||||||
|
let buttons_popover_right_click_open_file: gtk::Button = builder.get_object("buttons_popover_right_click_open_file").unwrap();
|
||||||
|
let buttons_popover_right_click_open_folder: gtk::Button = builder.get_object("buttons_popover_right_click_open_folder").unwrap();
|
||||||
|
|
||||||
//// Popovers
|
//// Popovers
|
||||||
let popover_select_duplicate: gtk::Popover = builder.get_object("popover_select_duplicate").unwrap();
|
let popover_select_duplicate: gtk::Popover = builder.get_object("popover_select_duplicate").unwrap();
|
||||||
let popover_select_simple_list: gtk::Popover = builder.get_object("popover_select_simple_list").unwrap();
|
let popover_select_simple_list: gtk::Popover = builder.get_object("popover_select_simple_list").unwrap();
|
||||||
let popover_select_very_simple_list: gtk::Popover = builder.get_object("popover_select_very_simple_list").unwrap();
|
let popover_select_very_simple_list: gtk::Popover = builder.get_object("popover_select_very_simple_list").unwrap();
|
||||||
|
let popover_right_click: gtk::Popover = builder.get_object("popover_right_click").unwrap();
|
||||||
|
|
||||||
//// Check Buttons
|
//// Check Buttons
|
||||||
let check_button_recursive: gtk::CheckButton = builder.get_object("check_button_recursive").unwrap();
|
let check_button_recursive: gtk::CheckButton = builder.get_object("check_button_recursive").unwrap();
|
||||||
|
@ -449,9 +457,12 @@ impl GuiData {
|
||||||
buttons_popover_very_simple_list_select_all,
|
buttons_popover_very_simple_list_select_all,
|
||||||
buttons_popover_very_simple_list_unselect_all,
|
buttons_popover_very_simple_list_unselect_all,
|
||||||
buttons_popover_very_simple_list_reverse,
|
buttons_popover_very_simple_list_reverse,
|
||||||
|
buttons_popover_right_click_open_file,
|
||||||
|
buttons_popover_right_click_open_folder,
|
||||||
popover_select_duplicate,
|
popover_select_duplicate,
|
||||||
popover_select_simple_list,
|
popover_select_simple_list,
|
||||||
popover_select_very_simple_list,
|
popover_select_very_simple_list,
|
||||||
|
popover_right_click,
|
||||||
check_button_recursive,
|
check_button_recursive,
|
||||||
check_button_music_title,
|
check_button_music_title,
|
||||||
check_button_music_artist,
|
check_button_music_artist,
|
||||||
|
|
|
@ -155,11 +155,7 @@ pub fn initialize_gui(gui_data: &GuiData) {
|
||||||
create_tree_view_similar_images(&mut tree_view);
|
create_tree_view_similar_images(&mut tree_view);
|
||||||
|
|
||||||
tree_view.connect_button_press_event(opening_double_click_function_similar_images);
|
tree_view.connect_button_press_event(opening_double_click_function_similar_images);
|
||||||
tree_view.connect_button_release_event(move |tree_view, event| {
|
tree_view.connect_button_release_event(move |tree_view, _event| {
|
||||||
if event.get_event_type() == gdk::EventType::DoubleButtonPress {
|
|
||||||
common_open_function(tree_view, ColumnsSimilarImages::Name as i32, ColumnsSimilarImages::Path as i32);
|
|
||||||
}
|
|
||||||
|
|
||||||
let (selected_rows, tree_model) = tree_view.get_selection().get_selected_rows();
|
let (selected_rows, tree_model) = tree_view.get_selection().get_selected_rows();
|
||||||
|
|
||||||
let mut created_image = false;
|
let mut created_image = false;
|
||||||
|
|
Loading…
Reference in a new issue