1
0
Fork 0
mirror of synced 2024-05-02 11:33:00 +12:00

Add basic scroll window to include and exclude directory folders

This commit is contained in:
Rafał Mikrut 2020-09-24 11:58:59 +02:00
parent 4242e8e222
commit c7b9daaff2
3 changed files with 98 additions and 22 deletions

View file

@ -61,8 +61,8 @@ cd czkawka
```
cargo run --bin czkawka_gui
```
![GUI GTK](https://user-images.githubusercontent.com/41945903/93716818-0eb7ee00-fb72-11ea-8fdb-50b49a221868.png)
- Run alternative Orbtk GUI(Still WIP)
![GUI GTK](https://user-images.githubusercontent.com/41945903/94106023-d72f9700-fe3a-11ea-821d-48484afd74fb.png)
- Run alternative Orbtk GUI(Still WIP, and currently stopped due https://github.com/intellij-rust/intellij-rust/issues/5943)
```
cargo run --bin czkawka_gui_orbtk
```

View file

@ -174,7 +174,9 @@ Author: Rafał Mikrut
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">6</property>
<property name="margin_start">5</property>
<property name="margin_end">5</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
@ -312,6 +314,7 @@ Author: Rafał Mikrut
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
</object>
<packing>
@ -336,6 +339,8 @@ Author: Rafał Mikrut
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_start">5</property>
<property name="margin_end">5</property>
<property name="spacing">6</property>
<child>
<object class="GtkBox">
@ -454,7 +459,7 @@ Author: Rafał Mikrut
</packing>
</child>
<child>
<object class="GtkScrolledWindow" id="scrolled_window_included_directories1">
<object class="GtkScrolledWindow" id="scrolled_window_excluded_directories">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="shadow_type">in</property>
@ -528,7 +533,7 @@ Author: Rafał Mikrut
</packing>
</child>
<child>
<object class="GtkEntry">
<object class="GtkEntry" id="entry_excluded_items">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="text" translatable="yes">*/.git,*/node_modules,/proc/*,/dev/*,*/lost+found</property>
@ -648,7 +653,7 @@ Author: Rafał Mikrut
</packing>
</child>
<child>
<object class="GtkEntry">
<object class="GtkEntry" id="entry_allowed_extensions">
<property name="visible">True</property>
<property name="can_focus">True</property>
</object>
@ -717,7 +722,7 @@ Author: Rafał Mikrut
</packing>
</child>
<child>
<object class="GtkEntry" id="duplicate_minimal_size">
<object class="GtkEntry" id="entry_duplicate_minimal_size">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="max_length">15</property>
@ -801,10 +806,15 @@ Author: Rafał Mikrut
<object class="GtkBox" id="buttons">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_start">5</property>
<property name="margin_end">5</property>
<property name="margin_top">2</property>
<property name="margin_bottom">2</property>
<child>
<object class="GtkBox" id="control_buttons">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">2</property>
<child>
<object class="GtkButton" id="buttons_search">
<property name="visible">True</property>
@ -1014,6 +1024,7 @@ Author: Rafał Mikrut
<object class="GtkBox" id="action_buttons">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">2</property>
<child>
<object class="GtkButton" id="buttons_select">
<property name="visible">True</property>
@ -1181,6 +1192,7 @@ Author: Rafał Mikrut
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="editable">False</property>
<property name="shadow_type">none</property>
</object>
<packing>
<property name="expand">False</property>
@ -1192,7 +1204,9 @@ Author: Rafał Mikrut
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="resize_mode">queue</property>
<property name="shadow_type">in</property>
<property name="min_content_height">100</property>
<child>
<object class="GtkTextView" id="errors">
<property name="visible">True</property>
@ -1204,6 +1218,7 @@ Author: Rafał Mikrut
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">4</property>
</packing>
</child>

View file

@ -19,9 +19,12 @@ enum ColumnsDefault {
Path,
Modification,
}
enum ColumnsDirectory {
Path = 0,
}
fn main() {
// Check for version check
// Printing version
{
let all_arguments: Vec<String> = env::args().skip(1).collect(); // Not need to check program name
@ -45,9 +48,9 @@ fn main() {
main_window.set_title("Czkawka GTK GUI");
////////////////////////////////////////////////////////////////////////////////////////////////
// State
// States
// Buttons State
// Buttons State - to remember existence of different buttons on pages
let shared_buttons: Rc<RefCell<_>> = Rc::new(RefCell::new(HashMap::<String, HashMap<String, bool>>::new()));
shared_buttons.borrow_mut().clear();
@ -65,16 +68,17 @@ fn main() {
shared_buttons.borrow_mut().insert(i.to_string(), temp_hashmap);
}
// State of search results
// State of search results - probably are not necessary due
let shared_duplication_state: Rc<RefCell<_>> = Rc::new(RefCell::new(DuplicateFinder::new()));
let shared_empty_folders_state: Rc<RefCell<_>> = Rc::new(RefCell::new(EmptyFolder::new()));
////////////////////////////////////////////////////////////////////////////////////////////////
// GUI Notepad Buttons
// GUI Duplicate Entry
let minimal_size_entry: gtk::Entry = builder.get_object("duplicate_minimal_size").unwrap();
// GUI Entry
let entry_duplicate_minimal_size: gtk::Entry = builder.get_object("entry_duplicate_minimal_size").unwrap();
let entry_allowed_extensions: gtk::Entry = builder.get_object("entry_allowed_extensions").unwrap();
let entry_excluded_items: gtk::Entry = builder.get_object("entry_excluded_items").unwrap();
// GUI Buttons
let buttons_search: gtk::Button = builder.get_object("buttons_search").unwrap();
@ -102,18 +106,58 @@ fn main() {
// Entry
let info_entry: gtk::Entry = builder.get_object("info_entry").unwrap(); // To show default
// Scrolled window
// // Scrolled windows
// Main notebook
let scrolled_window_duplicate_finder: gtk::ScrolledWindow = builder.get_object("scrolled_window_duplicate_finder").unwrap();
let scrolled_window_empty_folder_finder: gtk::ScrolledWindow = builder.get_object("scrolled_window_empty_folder_finder").unwrap();
// Upper notebook
let scrolled_window_included_directories: gtk::ScrolledWindow = builder.get_object("scrolled_window_included_directories").unwrap();
let scrolled_window_excluded_directories: gtk::ScrolledWindow = builder.get_object("scrolled_window_excluded_directories").unwrap();
// Set starting information in bottom panel
{
info_entry.set_text("Duplicated Files");
// Disable all unused buttons
// Disable and show buttons
buttons_search.show();
buttons_save.hide();
buttons_delete.hide();
// Set Include Directory
{
let col_types: [glib::types::Type; 3] = [glib::types::Type::String, glib::types::Type::String, glib::types::Type::String];
let list_store: gtk::ListStore = gtk::ListStore::new(&col_types);
let mut tree_view_included_directory: gtk::TreeView = TreeView::with_model(&list_store);
tree_view_included_directory.get_selection().set_mode(SelectionMode::Single);
create_tree_view_directories(&mut tree_view_included_directory);
let col_indices = [0];
let values: [&dyn ToValue; 1] = [&("/home")];
list_store.set(&list_store.append(), &col_indices, &values);
scrolled_window_included_directories.add(&tree_view_included_directory);
scrolled_window_included_directories.show_all();
}
// Set Excluded Directory
{
let col_types: [glib::types::Type; 3] = [glib::types::Type::String, glib::types::Type::String, glib::types::Type::String];
let list_store: gtk::ListStore = gtk::ListStore::new(&col_types);
let mut tree_view_excluded_directory: gtk::TreeView = TreeView::with_model(&list_store);
tree_view_excluded_directory.get_selection().set_mode(SelectionMode::Single);
create_tree_view_directories(&mut tree_view_excluded_directory);
scrolled_window_excluded_directories.add(&tree_view_excluded_directory);
scrolled_window_excluded_directories.show_all();
}
}
// Connecting events
@ -204,15 +248,17 @@ fn main() {
let mut df = DuplicateFinder::new();
let check_method = duplicate::CheckingMethod::HASH;
{
df.set_include_directory("/home/rafal/Pulpit".to_owned());
df.set_exclude_directory("/rafa/".to_owned());
df.set_excluded_items("".to_owned());
df.set_allowed_extensions("".to_owned());
df.set_min_file_size(match minimal_size_entry.get_text().as_str().parse::<u64>() {
df.set_include_directory("/home/rafal/Pulpit".to_owned()); // TODO
df.set_exclude_directory("/rafa/".to_owned()); // TODO
// df.set_include_directory(get_string_from_list_store(&scrolled_window_included_directories)); // TODO
// df.set_exclude_directory(get_string_from_list_store(&scrolled_window_excluded_directories)); // TODO
df.set_excluded_items(entry_allowed_extensions.get_text().as_str().to_string());
df.set_allowed_extensions(entry_allowed_extensions.get_text().as_str().to_string());
df.set_min_file_size(match entry_duplicate_minimal_size.get_text().as_str().parse::<u64>() {
Ok(t) => t,
Err(_) => 1024, // By default
});
df.set_check_method(check_method.clone());
df.set_check_method(check_method.clone()); // TODO
df.set_delete_method(duplicate::DeleteMethod::None);
df.find_duplicates();
}
@ -475,3 +521,18 @@ pub fn create_tree_view_empty_folders(tree_view_empty_folder_finder: &mut gtk::T
tree_view_empty_folder_finder.set_vexpand(true);
}
pub fn create_tree_view_directories(tree_view_directories: &mut gtk::TreeView) {
let renderer = gtk::CellRendererText::new();
let name_column: gtk::TreeViewColumn = TreeViewColumn::new();
name_column.pack_start(&renderer, true);
name_column.add_attribute(&renderer, "text", ColumnsDirectory::Path as i32);
tree_view_directories.append_column(&name_column);
tree_view_directories.set_headers_visible(false);
}
pub fn get_string_from_list_store(_scrolled_window: &gtk::ScrolledWindow) -> String {
// TODO
return "".to_string();
}