Reverse selection when clicking at middle mouse button (#572)
This commit is contained in:
parent
fc5f8af857
commit
d57b621594
|
@ -495,6 +495,7 @@ fn connect_event_mouse(gui_data: &GuiData) {
|
||||||
gui_data.main_notebook.tree_view_broken_files.clone(),
|
gui_data.main_notebook.tree_view_broken_files.clone(),
|
||||||
] {
|
] {
|
||||||
tree_view.connect_button_press_event(opening_double_click_function);
|
tree_view.connect_button_press_event(opening_double_click_function);
|
||||||
|
tree_view.connect_button_release_event(opening_middle_mouse_function);
|
||||||
}
|
}
|
||||||
// Duplicate
|
// Duplicate
|
||||||
{
|
{
|
||||||
|
|
|
@ -61,6 +61,16 @@ pub fn opening_double_click_function(tree_view: >k::TreeView, event: &gdk::Eve
|
||||||
gtk::Inhibit(false)
|
gtk::Inhibit(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn opening_middle_mouse_function(tree_view: >k::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
|
||||||
|
let nt_object = get_notebook_object_from_tree_view(tree_view);
|
||||||
|
if let Some(column_color) = nt_object.column_color {
|
||||||
|
if event.button() == 2 {
|
||||||
|
reverse_selection(tree_view, column_color, nt_object.column_selection);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
gtk::Inhibit(false)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn opening_double_click_function_directories(tree_view: >k::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
|
pub fn opening_double_click_function_directories(tree_view: >k::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
|
||||||
if event.event_type() == gdk::EventType::DoubleButtonPress && (event.button() == 1 || event.button() == 3) {
|
if event.event_type() == gdk::EventType::DoubleButtonPress && (event.button() == 1 || event.button() == 3) {
|
||||||
match get_notebook_upper_enum_from_tree_view(tree_view) {
|
match get_notebook_upper_enum_from_tree_view(tree_view) {
|
||||||
|
@ -146,6 +156,50 @@ fn common_open_function(tree_view: >k::TreeView, column_name: i32, column_path
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
fn reverse_selection(tree_view: >k::TreeView, column_color: i32, column_selection: i32) {
|
||||||
|
let (selected_rows, model) = tree_view.selection().selected_rows();
|
||||||
|
let model = model.downcast::<gtk::ListStore>().unwrap();
|
||||||
|
|
||||||
|
if selected_rows.len() != 1 {
|
||||||
|
return; // Multiple selection is not supported because it is a lot of harder to do it properly
|
||||||
|
}
|
||||||
|
let tree_path = selected_rows[0].clone();
|
||||||
|
let current_iter = model.iter(&tree_path).unwrap();
|
||||||
|
|
||||||
|
if model.value(¤t_iter, column_color).get::<String>().unwrap() == HEADER_ROW_COLOR {
|
||||||
|
return; // Selecting header is not supported(this is available by using reference)
|
||||||
|
}
|
||||||
|
|
||||||
|
// This will revert selection of current selected item, but I don't think that this is needed
|
||||||
|
// let current_value = model.value(¤t_iter, column_selection).get::<bool>().unwrap();
|
||||||
|
// model.set_value(¤t_iter, column_selection as u32, &(!current_value).to_value());
|
||||||
|
|
||||||
|
let to_upper_iter = current_iter.clone();
|
||||||
|
loop {
|
||||||
|
if !model.iter_previous(&to_upper_iter) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if model.value(&to_upper_iter, column_color).get::<String>().unwrap() == HEADER_ROW_COLOR {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
let current_value = model.value(&to_upper_iter, column_selection).get::<bool>().unwrap();
|
||||||
|
model.set_value(&to_upper_iter, column_selection as u32, &(!current_value).to_value());
|
||||||
|
}
|
||||||
|
|
||||||
|
let to_lower_iter = current_iter;
|
||||||
|
loop {
|
||||||
|
if !model.iter_next(&to_lower_iter) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if model.value(&to_lower_iter, column_color).get::<String>().unwrap() == HEADER_ROW_COLOR {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
let current_value = model.value(&to_lower_iter, column_selection).get::<bool>().unwrap();
|
||||||
|
model.set_value(&to_lower_iter, column_selection as u32, &(!current_value).to_value());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn common_open_function_upper_directories(tree_view: >k::TreeView, column_full_path: i32) {
|
fn common_open_function_upper_directories(tree_view: >k::TreeView, column_full_path: i32) {
|
||||||
let selection = tree_view.selection();
|
let selection = tree_view.selection();
|
||||||
|
|
Loading…
Reference in a new issue