use crate::class_gui_data::GuiData;
use crate::help_function::{get_list_store_from_tree_view, remove_selected_rows, ColumnsRules};
use crate::rules::{RulePlace, RuleType};
use crate::update_records::{update_records, UpdateMode};
use gtk::prelude::*;
use std::ops::DerefMut;
pub fn connect_rule_modify_add(gui_data: &GuiData) {
let button_add_rule = gui_data.rules_bottom_panel.button_add_rule.clone();
let window_with_rules = gui_data.window_rules.window_with_rules.clone();
let window_main = gui_data.window_main.clone();
let button_rule_window_add = gui_data.window_rules.button_rule_window_add.clone();
button_add_rule.connect_clicked(move |_e| {
button_rule_window_add.set_label("Add Rule");
window_with_rules.show();
window_main.set_sensitive(false);
});
}
pub fn connect_rule_modify_remove(gui_data: &GuiData) {
let button_remove_rule = gui_data.rules_bottom_panel.button_remove_rule.clone();
let tree_view_results = gui_data.results.tree_view_results.clone();
let tree_view_window_rules = gui_data.rules_bottom_panel.tree_view_window_rules.clone();
let shared_result_entries = gui_data.shared_result_entries.clone();
let rules = gui_data.rules.clone();
let label_files_folders = gui_data.upper_buttons.label_files_folders.clone();
button_remove_rule.connect_clicked(move |_e| {
let vec_rule_to_delete = remove_selected_rows(&tree_view_window_rules);
{
let mut rules = rules.borrow_mut();
let rules = rules.deref_mut();
for rule_to_delete in vec_rule_to_delete.iter().rev() {
rules.remove_rule(*rule_to_delete);
}
}
update_records(&tree_view_results, shared_result_entries.clone(), rules.clone(), UpdateMode::RuleRemoved, &label_files_folders);
});
}
pub fn connect_rule_modify_one_up(gui_data: &GuiData) {
let button_rule_one_up = gui_data.rules_bottom_panel.button_rule_one_up.clone();
let tree_view_results = gui_data.results.tree_view_results.clone();
let tree_view_window_rules = gui_data.rules_bottom_panel.tree_view_window_rules.clone();
let shared_result_entries = gui_data.shared_result_entries.clone();
let rules = gui_data.rules.clone();
let label_files_folders = gui_data.upper_buttons.label_files_folders.clone();
button_rule_one_up.connect_clicked(move |_e| {
let selection = tree_view_window_rules.selection();
if selection.selected_rows().0.is_empty() {
return;
}
{
let mut rules = rules.borrow_mut();
let rules = rules.deref_mut();
let list_store = get_list_store_from_tree_view(&tree_view_window_rules);
let (selected_rows, _tree_model) = selection.selected_rows();
let first_iter = list_store.iter_first().unwrap();
let first_path = list_store.path(&first_iter).unwrap();
if selected_rows.iter().any(|selected_path| *selected_path == first_path) {
return; }
let current_iter = first_iter.clone();
let mut previous_iter = first_iter;
if list_store.iter_next(¤t_iter) {
let mut current_index = 0;
loop {
current_index += 1;
let current_path = list_store.path(¤t_iter).unwrap();
let found = selected_rows.iter().any(|selected_path| *selected_path == current_path);
if found {
break;
}
previous_iter = current_iter.clone();
if !list_store.iter_next(¤t_iter) {
panic!("");
}
}
{
rules.rules.swap(current_index, current_index - 1);
let previous_type = list_store.value(&previous_iter, ColumnsRules::RuleType as i32).get::<String>().unwrap();
let previous_usage = list_store.value(&previous_iter, ColumnsRules::UsageType as i32).get::<String>().unwrap();
let previous_description = list_store.value(&previous_iter, ColumnsRules::Description as i32).get::<String>().unwrap();
let next_type = list_store.value(¤t_iter, ColumnsRules::RuleType as i32).get::<String>().unwrap();
let next_usage = list_store.value(¤t_iter, ColumnsRules::UsageType as i32).get::<String>().unwrap();
let next_description = list_store.value(¤t_iter, ColumnsRules::Description as i32).get::<String>().unwrap();
list_store.set_value(¤t_iter, ColumnsRules::RuleType as u32, &previous_type.to_value());
list_store.set_value(¤t_iter, ColumnsRules::UsageType as u32, &previous_usage.to_value());
list_store.set_value(¤t_iter, ColumnsRules::Description as u32, &previous_description.to_value());
list_store.set_value(&previous_iter, ColumnsRules::RuleType as u32, &next_type.to_value());
list_store.set_value(&previous_iter, ColumnsRules::UsageType as u32, &next_usage.to_value());
list_store.set_value(&previous_iter, ColumnsRules::Description as u32, &next_description.to_value());
}
selection.select_iter(&previous_iter);
} else {
return;
}
}
update_records(&tree_view_results, shared_result_entries.clone(), rules.clone(), UpdateMode::RuleRemoved, &label_files_folders);
});
}
pub fn connect_rule_modify_one_down(gui_data: &GuiData) {
let button_rule_one_down = gui_data.rules_bottom_panel.button_rule_one_down.clone();
let tree_view_results = gui_data.results.tree_view_results.clone();
let tree_view_window_rules = gui_data.rules_bottom_panel.tree_view_window_rules.clone();
let shared_result_entries = gui_data.shared_result_entries.clone();
let rules = gui_data.rules.clone();
let label_files_folders = gui_data.upper_buttons.label_files_folders.clone();
button_rule_one_down.connect_clicked(move |_e| {
let selection = tree_view_window_rules.selection();
if selection.selected_rows().0.is_empty() {
return;
}
{
let mut rules = rules.borrow_mut();
let rules = rules.deref_mut();
let list_store = get_list_store_from_tree_view(&tree_view_window_rules);
let (selected_rows, _tree_model) = selection.selected_rows();
let first_iter = list_store.iter_first().unwrap();
let current_iter;
let previous_iter = first_iter;
let mut current_index = 0;
loop {
current_index += 1;
let current_path = list_store.path(&previous_iter).unwrap();
let found = selected_rows.iter().any(|selected_path| *selected_path == current_path);
if found {
break;
}
if !list_store.iter_next(&previous_iter) {
panic!();
}
}
current_iter = previous_iter.clone();
if !list_store.iter_next(¤t_iter) {
return;
}
{
rules.rules.swap(current_index, current_index - 1);
let previous_type = list_store.value(&previous_iter, ColumnsRules::RuleType as i32).get::<String>().unwrap();
let previous_usage = list_store.value(&previous_iter, ColumnsRules::UsageType as i32).get::<String>().unwrap();
let previous_description = list_store.value(&previous_iter, ColumnsRules::Description as i32).get::<String>().unwrap();
let next_type = list_store.value(¤t_iter, ColumnsRules::RuleType as i32).get::<String>().unwrap();
let next_usage = list_store.value(¤t_iter, ColumnsRules::UsageType as i32).get::<String>().unwrap();
let next_description = list_store.value(¤t_iter, ColumnsRules::Description as i32).get::<String>().unwrap();
list_store.set_value(¤t_iter, ColumnsRules::RuleType as u32, &previous_type.to_value());
list_store.set_value(¤t_iter, ColumnsRules::UsageType as u32, &previous_usage.to_value());
list_store.set_value(¤t_iter, ColumnsRules::Description as u32, &previous_description.to_value());
list_store.set_value(&previous_iter, ColumnsRules::RuleType as u32, &next_type.to_value());
list_store.set_value(&previous_iter, ColumnsRules::UsageType as u32, &next_usage.to_value());
list_store.set_value(&previous_iter, ColumnsRules::Description as u32, &next_description.to_value());
}
selection.select_iter(¤t_iter);
}
update_records(&tree_view_results, shared_result_entries.clone(), rules.clone(), UpdateMode::RuleRemoved, &label_files_folders);
});
}
pub fn connect_rule_modify_edit(gui_data: &GuiData) {
let button_edit_rule = gui_data.rules_bottom_panel.button_edit_rule.clone();
let window_rules = gui_data.window_rules.clone();
let window_main = gui_data.window_main.clone();
let window_with_rules = gui_data.window_rules.window_with_rules.clone();
let rules = gui_data.rules.clone();
let tree_view = gui_data.rules_bottom_panel.tree_view_window_rules.clone();
let notebook_choose_rule = gui_data.window_rules.notebook_choose_rule.clone();
let button_rule_window_add = gui_data.window_rules.button_rule_window_add.clone();
let radio_button_letters_type_uppercase = window_rules.size_letters.radio_button_letters_type_uppercase.clone();
let radio_button_letters_type_lowercase = window_rules.size_letters.radio_button_letters_type_lowercase.clone();
let radio_button_letters_usage_name = window_rules.size_letters.radio_button_letters_usage_name.clone();
let radio_button_letters_usage_extension = window_rules.size_letters.radio_button_letters_usage_extension.clone();
let radio_button_letters_usage_both = window_rules.size_letters.radio_button_letters_usage_both.clone();
let radio_button_purge_name = window_rules.purge.radio_button_purge_name.clone();
let radio_button_purge_extension = window_rules.purge.radio_button_purge_extension.clone();
let radio_button_purge_both = window_rules.purge.radio_button_purge_both.clone();
let radio_button_add_text_after_name = window_rules.add_text.radio_button_add_text_after_name.clone();
let radio_button_add_text_before_name = window_rules.add_text.radio_button_add_text_before_name.clone();
let entry_add_text_text_to_add = window_rules.add_text.entry_add_text_text_to_add.clone();
let entry_add_text_text_to_trim = window_rules.trim.entry_add_text_text_to_trim.clone();
let radio_button_trim_name_start = window_rules.trim.radio_button_trim_name_start.clone();
let radio_button_trim_name_end = window_rules.trim.radio_button_trim_name_end.clone();
let radio_button_trim_extension_start = window_rules.trim.radio_button_trim_extension_start.clone();
let radio_button_trim_extension_end = window_rules.trim.radio_button_trim_extension_end.clone();
let radio_button_trim_case_insensitive = window_rules.trim.radio_button_trim_case_insensitive.clone();
let radio_button_trim_case_sensitive = window_rules.trim.radio_button_trim_case_sensitive;
let entry_custom_text_to_change = window_rules.custom.entry_custom_text_to_change.clone();
let radio_button_replace_extension = window_rules.replace.radio_button_replace_extension.clone();
let radio_button_replace_name = window_rules.replace.radio_button_replace_name.clone();
let radio_button_replace_both = window_rules.replace.radio_button_replace_both.clone();
let radio_button_replace_case_insensitive = window_rules.replace.radio_button_replace_case_insensitive.clone();
let radio_button_replace_case_sensitive = window_rules.replace.radio_button_replace_case_sensitive.clone();
let entry_replace_text_to_remove = window_rules.replace.entry_replace_text_to_remove.clone();
let entry_replace_text_to_change = window_rules.replace.entry_replace_text_to_change;
let radio_button_add_number_before_name = window_rules.add_number.radio_button_add_number_before_name.clone();
let radio_button_add_number_after_name = window_rules.add_number.radio_button_add_number_after_name.clone();
let entry_add_number_start_number = window_rules.add_number.entry_add_number_start_number.clone();
let entry_add_number_step = window_rules.add_number.entry_add_number_step.clone();
let entry_add_number_zeros = window_rules.add_number.entry_add_number_zeros;
button_edit_rule.connect_clicked(move |_e| {
let mut rules = rules.borrow_mut();
let rules = rules.deref_mut();
let selection = tree_view.selection();
let (selected_rows, model) = selection.selected_rows();
if selected_rows.is_empty() {
return; }
let selected_item = selected_rows[0].clone();
let mut item_number: usize = 0;
let iter = model.iter_first().unwrap();
loop {
if model.path(&iter).unwrap() == selected_item {
break;
}
if !model.iter_next(&iter) {
panic!();
}
item_number += 1;
}
rules.edit_mode = Some(item_number);
let rule = rules.rules[item_number].clone();
let rule_data = rule.rule_data.clone();
let rule_place = rule.rule_place.clone();
let rule_type = rule.rule_type.clone();
notebook_choose_rule.set_current_page(Some(rule.rule_type as u32));
match rule_type {
RuleType::CaseSize => {
if rule_data.to_lowercase {
radio_button_letters_type_lowercase.set_active(true);
} else {
radio_button_letters_type_uppercase.set_active(true);
}
if rule_place == RulePlace::Extension {
radio_button_letters_usage_extension.set_active(true);
} else if rule_place == RulePlace::ExtensionAndName {
radio_button_letters_usage_both.set_active(true);
} else if rule_place == RulePlace::Name {
radio_button_letters_usage_name.set_active(true);
}
}
RuleType::Purge => {
if rule_place == RulePlace::Extension {
radio_button_purge_extension.set_active(true);
} else if rule_place == RulePlace::ExtensionAndName {
radio_button_purge_both.set_active(true);
} else if rule_place == RulePlace::Name {
radio_button_purge_name.set_active(true);
}
}
RuleType::AddText => {
if rule_place == RulePlace::BeforeName {
radio_button_add_text_before_name.set_active(true);
} else if rule_place == RulePlace::AfterName {
radio_button_add_text_after_name.set_active(true);
}
entry_add_text_text_to_add.set_text(rule_data.add_text_text.as_str());
}
RuleType::Trim => {
if rule_place == RulePlace::FromNameStart {
radio_button_trim_name_start.set_active(true);
} else if rule_place == RulePlace::FromNameEndReverse {
radio_button_trim_name_end.set_active(true);
} else if rule_place == RulePlace::FromExtensionStart {
radio_button_trim_extension_start.set_active(true);
} else if rule_place == RulePlace::FromExtensionEndReverse {
radio_button_trim_extension_end.set_active(true);
}
if rule_data.case_sensitive {
radio_button_trim_case_sensitive.set_active(true);
} else {
radio_button_trim_case_insensitive.set_active(true);
}
entry_add_text_text_to_trim.set_text(rule_data.trim_text.as_str());
}
RuleType::Custom => {
entry_custom_text_to_change.set_text(rule_data.custom_text.as_str());
}
RuleType::Replace => {
if rule_place == RulePlace::ExtensionAndName {
radio_button_replace_both.set_active(true);
} else if rule_place == RulePlace::Name {
radio_button_replace_name.set_active(true);
} else if rule_place == RulePlace::Extension {
radio_button_replace_extension.set_active(true);
}
if rule_data.case_sensitive {
radio_button_replace_case_sensitive.set_active(true);
} else {
radio_button_replace_case_insensitive.set_active(true);
}
entry_replace_text_to_remove.set_text(rule_data.text_to_remove.as_str());
entry_replace_text_to_change.set_text(rule_data.text_to_replace.as_str());
}
RuleType::AddNumber => {
if rule_place == RulePlace::BeforeName {
radio_button_add_number_before_name.set_active(true);
} else if rule_place == RulePlace::AfterName {
radio_button_add_number_after_name.set_active(true);
}
entry_add_number_zeros.set_text(rule_data.fill_with_zeros.to_string().as_str());
entry_add_number_step.set_text(rule_data.number_step.to_string().as_str());
entry_add_number_start_number.set_text(rule_data.number_start.to_string().as_str());
}
}
button_rule_window_add.set_label("Edit Rule");
window_with_rules.show();
window_main.set_sensitive(false);
});
}