Add basic scroll window to include and exclude directory folders
This commit is contained in:
parent
4242e8e222
commit
c7b9daaff2
|
@ -61,8 +61,8 @@ cd czkawka
|
||||||
```
|
```
|
||||||
cargo run --bin czkawka_gui
|
cargo run --bin czkawka_gui
|
||||||
```
|
```
|
||||||
![GUI GTK](https://user-images.githubusercontent.com/41945903/93716818-0eb7ee00-fb72-11ea-8fdb-50b49a221868.png)
|
![GUI GTK](https://user-images.githubusercontent.com/41945903/94106023-d72f9700-fe3a-11ea-821d-48484afd74fb.png)
|
||||||
- Run alternative Orbtk GUI(Still WIP)
|
- 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
|
cargo run --bin czkawka_gui_orbtk
|
||||||
```
|
```
|
||||||
|
|
|
@ -174,7 +174,9 @@ Author: Rafał Mikrut
|
||||||
<object class="GtkBox">
|
<object class="GtkBox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">False</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>
|
<child>
|
||||||
<object class="GtkBox">
|
<object class="GtkBox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
@ -312,6 +314,7 @@ Author: Rafał Mikrut
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
<property name="active">True</property>
|
||||||
<property name="draw_indicator">True</property>
|
<property name="draw_indicator">True</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
@ -336,6 +339,8 @@ Author: Rafał Mikrut
|
||||||
<object class="GtkBox">
|
<object class="GtkBox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
|
<property name="margin_start">5</property>
|
||||||
|
<property name="margin_end">5</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkBox">
|
<object class="GtkBox">
|
||||||
|
@ -454,7 +459,7 @@ Author: Rafał Mikrut
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<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="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="shadow_type">in</property>
|
<property name="shadow_type">in</property>
|
||||||
|
@ -528,7 +533,7 @@ Author: Rafał Mikrut
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkEntry">
|
<object class="GtkEntry" id="entry_excluded_items">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="text" translatable="yes">*/.git,*/node_modules,/proc/*,/dev/*,*/lost+found</property>
|
<property name="text" translatable="yes">*/.git,*/node_modules,/proc/*,/dev/*,*/lost+found</property>
|
||||||
|
@ -648,7 +653,7 @@ Author: Rafał Mikrut
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkEntry">
|
<object class="GtkEntry" id="entry_allowed_extensions">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
</object>
|
</object>
|
||||||
|
@ -717,7 +722,7 @@ Author: Rafał Mikrut
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkEntry" id="duplicate_minimal_size">
|
<object class="GtkEntry" id="entry_duplicate_minimal_size">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="max_length">15</property>
|
<property name="max_length">15</property>
|
||||||
|
@ -801,10 +806,15 @@ Author: Rafał Mikrut
|
||||||
<object class="GtkBox" id="buttons">
|
<object class="GtkBox" id="buttons">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">False</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>
|
<child>
|
||||||
<object class="GtkBox" id="control_buttons">
|
<object class="GtkBox" id="control_buttons">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
|
<property name="spacing">2</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="buttons_search">
|
<object class="GtkButton" id="buttons_search">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
@ -1014,6 +1024,7 @@ Author: Rafał Mikrut
|
||||||
<object class="GtkBox" id="action_buttons">
|
<object class="GtkBox" id="action_buttons">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
|
<property name="spacing">2</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="buttons_select">
|
<object class="GtkButton" id="buttons_select">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
@ -1181,6 +1192,7 @@ Author: Rafał Mikrut
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="editable">False</property>
|
<property name="editable">False</property>
|
||||||
|
<property name="shadow_type">none</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -1192,7 +1204,9 @@ Author: Rafał Mikrut
|
||||||
<object class="GtkScrolledWindow">
|
<object class="GtkScrolledWindow">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
|
<property name="resize_mode">queue</property>
|
||||||
<property name="shadow_type">in</property>
|
<property name="shadow_type">in</property>
|
||||||
|
<property name="min_content_height">100</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkTextView" id="errors">
|
<object class="GtkTextView" id="errors">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
@ -1204,6 +1218,7 @@ Author: Rafał Mikrut
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
<property name="fill">True</property>
|
<property name="fill">True</property>
|
||||||
|
<property name="pack_type">end</property>
|
||||||
<property name="position">4</property>
|
<property name="position">4</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
|
|
@ -19,9 +19,12 @@ enum ColumnsDefault {
|
||||||
Path,
|
Path,
|
||||||
Modification,
|
Modification,
|
||||||
}
|
}
|
||||||
|
enum ColumnsDirectory {
|
||||||
|
Path = 0,
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
// Check for version check
|
// Printing version
|
||||||
{
|
{
|
||||||
let all_arguments: Vec<String> = env::args().skip(1).collect(); // Not need to check program name
|
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");
|
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()));
|
let shared_buttons: Rc<RefCell<_>> = Rc::new(RefCell::new(HashMap::<String, HashMap<String, bool>>::new()));
|
||||||
shared_buttons.borrow_mut().clear();
|
shared_buttons.borrow_mut().clear();
|
||||||
|
@ -65,16 +68,17 @@ fn main() {
|
||||||
shared_buttons.borrow_mut().insert(i.to_string(), temp_hashmap);
|
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_duplication_state: Rc<RefCell<_>> = Rc::new(RefCell::new(DuplicateFinder::new()));
|
||||||
let shared_empty_folders_state: Rc<RefCell<_>> = Rc::new(RefCell::new(EmptyFolder::new()));
|
let shared_empty_folders_state: Rc<RefCell<_>> = Rc::new(RefCell::new(EmptyFolder::new()));
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// GUI Notepad Buttons
|
|
||||||
|
|
||||||
// GUI Duplicate Entry
|
// GUI Entry
|
||||||
let minimal_size_entry: gtk::Entry = builder.get_object("duplicate_minimal_size").unwrap();
|
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
|
// GUI Buttons
|
||||||
let buttons_search: gtk::Button = builder.get_object("buttons_search").unwrap();
|
let buttons_search: gtk::Button = builder.get_object("buttons_search").unwrap();
|
||||||
|
@ -102,18 +106,58 @@ fn main() {
|
||||||
// Entry
|
// Entry
|
||||||
let info_entry: gtk::Entry = builder.get_object("info_entry").unwrap(); // To show default
|
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_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();
|
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
|
// Set starting information in bottom panel
|
||||||
{
|
{
|
||||||
info_entry.set_text("Duplicated Files");
|
info_entry.set_text("Duplicated Files");
|
||||||
|
|
||||||
// Disable all unused buttons
|
// Disable and show buttons
|
||||||
buttons_search.show();
|
buttons_search.show();
|
||||||
buttons_save.hide();
|
buttons_save.hide();
|
||||||
buttons_delete.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
|
// Connecting events
|
||||||
|
@ -204,15 +248,17 @@ fn main() {
|
||||||
let mut df = DuplicateFinder::new();
|
let mut df = DuplicateFinder::new();
|
||||||
let check_method = duplicate::CheckingMethod::HASH;
|
let check_method = duplicate::CheckingMethod::HASH;
|
||||||
{
|
{
|
||||||
df.set_include_directory("/home/rafal/Pulpit".to_owned());
|
df.set_include_directory("/home/rafal/Pulpit".to_owned()); // TODO
|
||||||
df.set_exclude_directory("/rafa/".to_owned());
|
df.set_exclude_directory("/rafa/".to_owned()); // TODO
|
||||||
df.set_excluded_items("".to_owned());
|
// df.set_include_directory(get_string_from_list_store(&scrolled_window_included_directories)); // TODO
|
||||||
df.set_allowed_extensions("".to_owned());
|
// df.set_exclude_directory(get_string_from_list_store(&scrolled_window_excluded_directories)); // TODO
|
||||||
df.set_min_file_size(match minimal_size_entry.get_text().as_str().parse::<u64>() {
|
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,
|
Ok(t) => t,
|
||||||
Err(_) => 1024, // By default
|
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.set_delete_method(duplicate::DeleteMethod::None);
|
||||||
df.find_duplicates();
|
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);
|
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: >k::ScrolledWindow) -> String {
|
||||||
|
// TODO
|
||||||
|
return "".to_string();
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue