From 4f65c9193aefc5b21e95cf5d25771277b48f3ccd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mikrut?= Date: Tue, 7 Nov 2023 21:52:43 +0100 Subject: [PATCH] Added manual setting --- krokiet/src/connect_directories_changes.rs | 41 +++++++++++- krokiet/ui/bottom_panel.slint | 40 ++++-------- krokiet/ui/callabler.slint | 4 ++ krokiet/ui/color_palette.slint | 7 +- krokiet/ui/left_side_panel.slint | 1 - krokiet/ui/main_window.slint | 74 +++++++++++++++++++++- krokiet/ui/settings.slint | 7 -- 7 files changed, 132 insertions(+), 42 deletions(-) create mode 100644 krokiet/ui/callabler.slint diff --git a/krokiet/src/connect_directories_changes.rs b/krokiet/src/connect_directories_changes.rs index ae579ee..0eb6ccb 100644 --- a/krokiet/src/connect_directories_changes.rs +++ b/krokiet/src/connect_directories_changes.rs @@ -1,16 +1,53 @@ use rfd::FileDialog; use slint::{ComponentHandle, Model, ModelRc, VecModel}; -use crate::{MainWindow, Settings}; +use crate::{Callabler, MainWindow, Settings}; pub fn connect_add_remove_directories(app: &MainWindow) { connect_add_directories(app); connect_remove_directories(app); + connect_add_manual_directories(app); +} + +fn connect_add_manual_directories(app: &MainWindow) { + let a = app.as_weak(); + app.global::().on_added_manual_directories(move |included_directories, list_of_files_to_add| { + let non_empty_lines = list_of_files_to_add.lines().filter(|x| !x.is_empty()).collect::>(); + if non_empty_lines.is_empty() { + return; + } + let app = a.upgrade().unwrap(); + let settings = app.global::(); + + if included_directories { + let included_model = settings.get_included_directories(); + let mut included_model = included_model.iter().collect::>(); + included_model.extend(non_empty_lines.iter().map(|x| { + let mut element = slint::StandardListViewItem::default(); + element.text = slint::SharedString::from(x.to_string()); + element + })); + included_model.sort_by_cached_key(|x| x.text.to_string()); + included_model.dedup(); + settings.set_included_directories(ModelRc::new(VecModel::from(included_model))); + } else { + let excluded_model = settings.get_excluded_directories(); + let mut excluded_model = excluded_model.iter().collect::>(); + excluded_model.extend(non_empty_lines.iter().map(|x| { + let mut element = slint::StandardListViewItem::default(); + element.text = slint::SharedString::from(x.to_string()); + element + })); + excluded_model.sort_by_cached_key(|x| x.text.to_string()); + excluded_model.dedup(); + settings.set_excluded_directories(ModelRc::new(VecModel::from(excluded_model))); + } + }); } fn connect_remove_directories(app: &MainWindow) { let a = app.as_weak(); - app.global::().on_remove_item_directories(move |included_directories, current_index| { + app.global::().on_remove_item_directories(move |included_directories, current_index| { // Nothing selected if current_index == -1 { return; diff --git a/krokiet/ui/bottom_panel.slint b/krokiet/ui/bottom_panel.slint index fb9660f..7b11542 100644 --- a/krokiet/ui/bottom_panel.slint +++ b/krokiet/ui/bottom_panel.slint @@ -2,9 +2,11 @@ import {Button, StandardListView, VerticalBox, ScrollView, TextEdit} from "std-widgets.slint"; import {Settings} from "settings.slint"; import {BottomPanelVisibility} from "common.slint"; +import {Callabler} from "callabler.slint"; component DirectoriesPanel { callback folder-choose-requested(bool); + callback show_manual_add_dialog(bool); // Included directories HorizontalLayout { @@ -19,7 +21,13 @@ component DirectoriesPanel { Button { text: "Remove"; clicked => { - Settings.remove_item_directories(true, included-list.current-item); + Callabler.remove_item_directories(true, included-list.current-item); + } + } + Button { + text: "Manual Add"; + clicked => { + show_manual_add_dialog(true); } } Rectangle { @@ -50,13 +58,13 @@ component DirectoriesPanel { Button { text: "Remove"; clicked => { - Settings.remove_item_directories(false, excluded-list.current-item); + Callabler.remove_item_directories(false, excluded-list.current-item); } } Button { text: "Manual Add"; clicked => { - popup_item.show(); + show_manual_add_dialog(false); } } Rectangle { @@ -75,30 +83,6 @@ component DirectoriesPanel { } } } - - popup_item := PopupWindow { - height: root.height; - width: root.width; - - private property text_data; - - close-on-click: false; - - TextEdit { - text <=> text-data; - } - TextEdit { - - } - - Rectangle { - background: red; - border-radius: 3px; - border-width: 2px; - border-color: blue; - } - - } } // TODO this should be a normal read only Text editor component TextErrorsPanel inherits TextEdit { @@ -113,6 +97,7 @@ export component BottomPanel { in-out property console_text; callback folder-choose-requested(bool); + callback show_manual_add_dialog(bool); callback set_console_text(string); min-height: bottom-panel-visibility == BottomPanelVisibility.NotVisible ? 0px : 150px; @@ -122,6 +107,7 @@ export component BottomPanel { width: parent.width; height: parent.height; folder-choose-requested(included-directories) => {root.folder-choose-requested(included-directories)} + show_manual_add_dialog(included-directories) => {root.show_manual_add_dialog(included-directories)} } if bottom-panel-visibility == BottomPanelVisibility.TextErrors : TextErrorsPanel { diff --git a/krokiet/ui/callabler.slint b/krokiet/ui/callabler.slint new file mode 100644 index 0000000..dbb78e5 --- /dev/null +++ b/krokiet/ui/callabler.slint @@ -0,0 +1,4 @@ +export global Callabler { + callback remove_item_directories(bool, int); + callback added_manual_directories(bool, string); +} \ No newline at end of file diff --git a/krokiet/ui/color_palette.slint b/krokiet/ui/color_palette.slint index 447d035..8150309 100644 --- a/krokiet/ui/color_palette.slint +++ b/krokiet/ui/color_palette.slint @@ -2,11 +2,14 @@ import { StyleMetrics } from "std-widgets.slint"; export global ColorPalette { // Tabs at left side - in-out property tab_selected_color: StyleMetrics.dark-color-scheme ? red : blue; - in-out property tab_hovered_color: StyleMetrics.dark-color-scheme ? green : yellow; + in-out property tab_selected_color: StyleMetrics.dark-color-scheme ? #353535 : #5e5e5e; + in-out property tab_hovered_color: StyleMetrics.dark-color-scheme ? #49494926 : #80808014; // ListView in-out property list_view_normal_color: StyleMetrics.dark-color-scheme ? #474747 : #dddddd; in-out property list_view_normal_header_color: StyleMetrics.dark-color-scheme ? #292929 : #888888; in-out property list_view_normal_selected_header: StyleMetrics.dark-color-scheme ? #575757 : #cccccc; + + // Popup + in-out property popup_background: StyleMetrics.dark-color-scheme ? #353535 : #5e5e5e; } \ No newline at end of file diff --git a/krokiet/ui/left_side_panel.slint b/krokiet/ui/left_side_panel.slint index 4cbe837..75a5dc3 100644 --- a/krokiet/ui/left_side_panel.slint +++ b/krokiet/ui/left_side_panel.slint @@ -12,7 +12,6 @@ component TabItem { width: parent.width; horizontal-stretch: 1.0; background: touch-area.has-hover ? ColorPalette.tab-hovered-color : transparent; - opacity: 0.05; touch_area:= TouchArea { clicked => { diff --git a/krokiet/ui/main_window.slint b/krokiet/ui/main_window.slint index 9248ba6..e3ef174 100644 --- a/krokiet/ui/main_window.slint +++ b/krokiet/ui/main_window.slint @@ -1,4 +1,4 @@ -import { Button, VerticalBox , HorizontalBox, TabWidget, ListView, StandardListView, StandardTableView, CheckBox, LineEdit} from "std-widgets.slint"; +import { Button, VerticalBox ,TextEdit, HorizontalBox, TabWidget, ListView, StandardListView, StandardTableView, CheckBox, LineEdit} from "std-widgets.slint"; import {SelectableTableView} from "selectable_tree_view.slint"; import {LeftSidePanel} from "left_side_panel.slint"; import {MainList} from "main_lists.slint"; @@ -6,10 +6,12 @@ import {CurrentTab, ProgressToSend} from "common.slint"; import { ActionButtons } from "action_buttons.slint"; import { Progress } from "progress.slint"; import {MainListModel} from "common.slint"; -import {Settings, SettingsModel} from "settings.slint"; +import {Settings} from "settings.slint"; +import {Callabler} from "callabler.slint"; import { BottomPanel } from "bottom_panel.slint"; +import {ColorPalette} from "color_palette.slint"; -export {Settings} +export {Settings, Callabler} export component MainWindow inherits Window { callback deleted; @@ -114,12 +116,78 @@ export component MainWindow inherits Window { read-only: true; } bottom_panel := BottomPanel { + property included-directories; // TODO why cannot set popup_item property? Strange limitation + bottom-panel-visibility <=> action_buttons.bottom-panel-visibility; vertical-stretch: 0.0; folder-choose-requested(included-directories) => {root.folder-choose-requested(included-directories)} + show_manual_add_dialog(included-directories) => { + self.included-directories = included-directories; + popup-item.show() + } } } + popup_item := PopupWindow { + height: root.height; + width: root.width; + + property included_directories; + private property text_data; + + callback set_included_directories(bool); + + close-on-click: false; + + set-included-directories(included-directories) => { + self.included-directories = included-directories; + } + + HorizontalLayout { + alignment: LayoutAlignment.center; + VerticalLayout { + alignment: LayoutAlignment.center; + Rectangle { + clip: true; + width: popup_item.width - 20px; + height: popup_item.height - 20px; + border-radius: 20px; + background: ColorPalette.popup_background; // TODO Dark theme + VerticalLayout { + // width: parent.width - 20px; + // height: parent.height - 20px; + Text { + text: "Please add directories one per line"; + horizontal-alignment: TextHorizontalAlignment.center; + } + TextEdit { + vertical-stretch: 1.0; + text <=> text-data; + } + HorizontalLayout { + min-height: 20px; + Button { + enabled: text-data != ""; + text: "OK"; + clicked => { + Callabler.added_manual_directories(bottom-panel.included-directories, text_data); + popup-item.close(); + } + } + Button { + text: "Cancel"; + clicked => { + popup-item.close(); + } + } + } + } + } + } + } + + } + set_console_text(text) => { bottom-panel.set_console_text(text); } diff --git a/krokiet/ui/settings.slint b/krokiet/ui/settings.slint index 2186b15..f9d0efc 100644 --- a/krokiet/ui/settings.slint +++ b/krokiet/ui/settings.slint @@ -1,13 +1,6 @@ -export struct SettingsModel { - is_selected: bool, -} - export global Settings { - in-out property model; in-out property checkbox_checked: false; in-out property <[StandardListViewItem]> included_directories: [{text: "ABCD"}, {text: "BCDA"}]; in-out property <[StandardListViewItem]> excluded_directories: [{text: "ABCD"}, {text: "BCDA"}, {text: "CDFFF"}]; - - callback remove_item_directories(bool, int); } \ No newline at end of file