Skip to content

Commit 81055ce

Browse files
committed
REA
1 parent 46d9fe4 commit 81055ce

File tree

5 files changed

+65
-36
lines changed

5 files changed

+65
-36
lines changed

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,14 @@ articles about it etc.
141141
Also, I really appreciate work of people that create crates on which Czkawka is based and for that I try to report bugs
142142
to make it even better.
143143

144+
## Officially Supported Projects
145+
Only the [prebuild-binaries](https://github.com/qarmin/czkawka/releases), projects on [crates.io](https://crates.io/crates/czkawka_gui) and [flathub](https://flathub.org/apps/com.github.qarmin.czkawka) are directly maintained by me.
146+
147+
Czkawka does not have an official website, so do not trust any sites that claim to be the official one.
148+
149+
If you use packages from unofficial sources, make sure they are safe.
150+
151+
144152
## License
145153

146154
The entire code in this repository is licensed under the [MIT](https://mit-license.org/) license.

krokiet/src/connect_row_selection.rs

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,7 @@ mod opener {
211211
}
212212
mod selection {
213213
use super::*;
214+
use crate::connect_row_selection::checker::change_number_of_enabled_items;
214215

215216
pub(crate) fn connect_select_all_rows(app: &MainWindow) {
216217
let a = app.as_weak();
@@ -262,10 +263,11 @@ mod selection {
262263
let selection = lock.get_mut(&active_tab).expect("Failed to get selection data");
263264
let model = active_tab.get_tool_model(&app);
264265

265-
let new_model = rows_reverse_checked_selection(selection, &model);
266+
let (checked_items, unchecked_items, new_model) = rows_reverse_checked_selection(selection, &model);
266267
if let Some(new_model) = new_model {
267268
active_tab.set_tool_model(&app, new_model);
268269
}
270+
change_number_of_enabled_items(&app, active_tab, checked_items as i64 - unchecked_items as i64);
269271
});
270272
}
271273
pub(crate) fn reverse_selection_on_specific_item(app: &MainWindow) {
@@ -317,6 +319,7 @@ pub(crate) mod checker {
317319
});
318320
}
319321

322+
// TODO - sad day for code readability, because slint not supports i64 - https://github.com/slint-ui/slint/issues/6589
320323
pub(crate) fn set_number_of_enabled_items(app: &MainWindow, active_tab: CurrentTab, items_number: u64) {
321324
let (it1, it2) = split_u64_into_i32s(items_number);
322325
error!("SET {:?}, {}", &active_tab, &items_number);
@@ -661,7 +664,9 @@ fn row_select_items_with_shift(selection: &mut SelectionData, model: &ModelRc<Ma
661664
}
662665
}
663666

664-
fn rows_reverse_checked_selection(selection: &SelectionData, model: &ModelRc<MainListModel>) -> Option<ModelRc<MainListModel>> {
667+
fn rows_reverse_checked_selection(selection: &SelectionData, model: &ModelRc<MainListModel>) -> (u64, u64, Option<ModelRc<MainListModel>>) {
668+
let (mut checked_items, mut unchecked_items) = (0, 0);
669+
665670
if selection.exceeded_limit {
666671
trace!("[SLOW][REPLACE_MODEL] reverse checked selection(SPACE)");
667672
let new_model = model
@@ -670,11 +675,16 @@ fn rows_reverse_checked_selection(selection: &SelectionData, model: &ModelRc<Mai
670675
if row.selected_row {
671676
assert!(!row.header_row); // Header row should not be selected
672677
row.checked = !row.checked;
678+
if row.checked {
679+
checked_items += 1;
680+
} else {
681+
unchecked_items += 1;
682+
}
673683
}
674684
row
675685
})
676686
.collect::<Vec<_>>();
677-
return Some(ModelRc::new(VecModel::from(new_model)));
687+
return (checked_items, unchecked_items, Some(ModelRc::new(VecModel::from(new_model))));
678688
} else if !selection.selected_rows.is_empty() {
679689
trace!("[FAST][ONE_BY_ONE] reverse selection(SPACE)");
680690
for id in &selection.selected_rows {
@@ -684,10 +694,15 @@ fn rows_reverse_checked_selection(selection: &SelectionData, model: &ModelRc<Mai
684694
assert!(model_data.selected_row);
685695
assert!(!model_data.header_row);
686696
model_data.checked = !model_data.checked;
697+
if model_data.checked {
698+
checked_items += 1;
699+
} else {
700+
unchecked_items += 1;
701+
}
687702
model.set_row_data(*id, model_data);
688703
}
689704
}
690-
None
705+
(checked_items, unchecked_items, None)
691706
}
692707

693708
#[cfg(test)]
@@ -933,23 +948,27 @@ mod tests {
933948

934949
#[test]
935950
fn rows_reverse_checked_selection_with_selected_rows() {
936-
let mut model = get_model_vec(3);
951+
let mut model = get_model_vec(4);
937952
model[0].selected_row = true;
938953
model[1].selected_row = true;
954+
model[2].selected_row = true;
955+
model[2].checked = true;
939956
let model = create_model_from_model_vec(&model);
940957

941958
let selection = SelectionData {
942-
number_of_selected_rows: 2,
943-
selected_rows: vec![0, 1],
959+
number_of_selected_rows: 3,
960+
selected_rows: vec![0, 1, 2],
944961
exceeded_limit: false,
945962
};
946963

947-
let new_model = rows_reverse_checked_selection(&selection, &model);
964+
let (checked_items, unchecked_items, new_model) = rows_reverse_checked_selection(&selection, &model);
948965

949966
assert!(new_model.is_none());
950967
assert!(model.row_data(0).unwrap().checked);
951968
assert!(model.row_data(1).unwrap().checked);
952969
assert!(!model.row_data(2).unwrap().checked);
970+
assert_eq!(checked_items, 2);
971+
assert_eq!(unchecked_items, 1);
953972
}
954973

955974
#[test]
@@ -965,12 +984,14 @@ mod tests {
965984
exceeded_limit: true,
966985
};
967986

968-
let new_model = rows_reverse_checked_selection(&selection, &model);
987+
let (checked_items, unchecked_items, new_model) = rows_reverse_checked_selection(&selection, &model);
969988

970989
assert!(new_model.is_some());
971990
let new_model = new_model.unwrap();
972991
assert!(new_model.row_data(0).unwrap().checked);
973992
assert!(new_model.row_data(1).unwrap().checked);
974993
assert!(!new_model.row_data(2).unwrap().checked);
994+
assert_eq!(checked_items, 2);
995+
assert_eq!(unchecked_items, 0);
975996
}
976997
}

krokiet/ui/selectable_tree_view.slint

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,10 @@ export component SelectableTableView inherits Rectangle {
116116
checked: r.checked && !r.header_row;
117117
width: root.column_sizes[0];
118118
toggled => {
119-
r.checked = self.checked;
120-
Callabler.change_number_of_checked_items(self.checked ? 1 : -1);
119+
Callabler.change_number_of_checked_items(r.checked ? -1 : 1);
120+
r.checked = !r.checked;
121+
// TODO - this is equivalent to r.checked = self.checked, but for now it works better, because self.checked contains sometimes old state
122+
// https://github.com/slint-ui/slint/issues/602
121123
}
122124
}
123125

@@ -136,7 +138,7 @@ export component SelectableTableView inherits Rectangle {
136138
}
137139
}
138140

139-
// Already rust code should deal with selections in the model, but this one is not able to handle
141+
// Already rust code should deal with selections in the model, but not all state is available in rust code
140142
public function reset_selection() {
141143
start_shift_idx = -1;
142144
last_selected_idx = -1;

misc/test_compilation_speed_size/src/main.rs

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use std::path::Path;
66

77
use walkdir::WalkDir;
88

9-
use crate::model::{BuildOrCheck, CodegenUnits, Config, Incremental, LTO, OptLevel, OverflowChecks, Panic, Results, SplitDebug, Debugg};
9+
use crate::model::{BuildOrCheck, CodegenUnits, Config, Debugg, Incremental, OptLevel, OverflowChecks, Panic, Results, SplitDebug, LTO};
1010

1111
const START_CONFIG_TOML: &str = r#"[workspace]
1212
members = [
@@ -120,10 +120,10 @@ fn get_configs() -> Vec<Config> {
120120
release_thin_lto.name = "release + thin lto";
121121
release_thin_lto.lto = LTO::Thin;
122122

123-
let mut release_thin_lto = release_base.clone();
124-
release_thin_lto.name = "release + thin lto + optimize size";
125-
release_thin_lto.lto = LTO::Thin;
126-
release_thin_lto.opt_level = OptLevel::S;
123+
let mut release_thin_lto_optimize_size = release_base.clone();
124+
release_thin_lto_optimize_size.name = "release + thin lto + optimize size";
125+
release_thin_lto_optimize_size.lto = LTO::Thin;
126+
release_thin_lto_optimize_size.opt_level = OptLevel::S;
127127

128128
let mut release_full_lto = release_base.clone();
129129
release_full_lto.name = "release + fat lto";
@@ -135,27 +135,34 @@ fn get_configs() -> Vec<Config> {
135135
release_fastest.codegen_units = CodegenUnits::One;
136136
release_fastest.panic = Panic::Abort;
137137

138-
139-
vec![debug_base, release_base, release_thin_lto, release_full_lto, debug_fast_check, check_fast_check, release_fastest]
138+
vec![
139+
debug_base,
140+
release_base,
141+
release_thin_lto,
142+
release_full_lto,
143+
debug_fast_check,
144+
check_fast_check,
145+
release_fastest,
146+
release_thin_lto_optimize_size,
147+
]
140148
}
141149

142150
fn clean_cargo() {
143151
println!("Cleaning cargo...");
144-
let output = std::process::Command::new("cargo").arg("clean")
152+
let output = std::process::Command::new("cargo")
153+
.arg("clean")
145154
.stdout(std::process::Stdio::inherit())
146-
.stderr(std::process::Stdio::inherit()).output().expect("Failed to execute cargo clean");
155+
.stderr(std::process::Stdio::inherit())
156+
.output()
157+
.expect("Failed to execute cargo clean");
147158

148159
if !output.status.success() {
149160
panic!("Cargo clean failed: {}", String::from_utf8_lossy(&output.stderr));
150161
}
151162
}
152163

153164
fn run_cargo_build(project: &str, threads_number: u32, build: BuildOrCheck) {
154-
let build_check = if build == BuildOrCheck::Build {
155-
"build"
156-
} else {
157-
"check"
158-
};
165+
let build_check = if build == BuildOrCheck::Build { "build" } else { "check" };
159166
let mut command = std::process::Command::new("cargo");
160167
command
161168
.env("CARGO_BUILD_JOBS", threads_number.to_string())
@@ -165,8 +172,7 @@ fn run_cargo_build(project: &str, threads_number: u32, build: BuildOrCheck) {
165172
.arg("--profile")
166173
.arg("fff")
167174
.stdout(std::process::Stdio::inherit())
168-
.stderr(std::process::Stdio::inherit())
169-
;
175+
.stderr(std::process::Stdio::inherit());
170176

171177
let output = command.output().expect("Failed to execute cargo build");
172178

misc/test_compilation_speed_size/src/model.rs

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -163,13 +163,6 @@ pub struct Config {
163163

164164
impl Config {
165165
pub fn to_str(&self) -> String {
166-
// format!(
167-
// "{}\n{}\n{}\n",
168-
// self.lto.to_str(),
169-
// self.debug.to_str(),
170-
// self.opt_level.to_str(),
171-
// )
172-
// All the fields with to_str split by \n, but without name
173166
format!(
174167
"{}\n{}\n{}\n{}\n{}\n{}\n{}\n{}",
175168
self.lto.to_str(),
@@ -183,7 +176,6 @@ impl Config {
183176
)
184177
}
185178
pub fn to_string_short(&self) -> String {
186-
// All the fields with to_str split by space, but without name
187179
format!(
188180
"LTO: {}, Debug: {}, Opt: {}, Build/Check: {}, Codegen Units: {}, Panic: {}, Split Debug: {}, Overflow Checks: {}, Incremental: {}",
189181
self.lto.to_str(),

0 commit comments

Comments
 (0)