Fix transpose issue introduced on prev commit
This commit is contained in:
parent
323d5457f9
commit
71fc2f9589
|
@ -131,7 +131,7 @@ impl RecordView {
|
||||||
Orientation::Left => (column, row),
|
Orientation::Left => (column, row),
|
||||||
};
|
};
|
||||||
|
|
||||||
if row >= layer.count_rows() || column >= layer.count_columns() {
|
if row >= layer.record_values.len() || column >= layer.column_names.len() {
|
||||||
// actually must never happen; unless cursor works incorrectly
|
// actually must never happen; unless cursor works incorrectly
|
||||||
// if being sure about cursor it can be deleted;
|
// if being sure about cursor it can be deleted;
|
||||||
return Value::nothing(Span::unknown());
|
return Value::nothing(Span::unknown());
|
||||||
|
@ -610,7 +610,7 @@ fn estimate_page_size(area: Rect, show_head: bool) -> u16 {
|
||||||
/// scroll to the end of the data
|
/// scroll to the end of the data
|
||||||
fn tail_data(state: &mut RecordView, page_size: usize) {
|
fn tail_data(state: &mut RecordView, page_size: usize) {
|
||||||
let layer = state.get_layer_last_mut();
|
let layer = state.get_layer_last_mut();
|
||||||
let count_rows = layer.count_rows();
|
let count_rows = layer.record_values.len();
|
||||||
if count_rows > page_size {
|
if count_rows > page_size {
|
||||||
layer
|
layer
|
||||||
.cursor
|
.cursor
|
||||||
|
@ -722,10 +722,24 @@ fn get_percentage(value: usize, max: usize) -> usize {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn transpose_table(layer: &mut RecordLayer) {
|
fn transpose_table(layer: &mut RecordLayer) {
|
||||||
|
if layer.was_transposed {
|
||||||
|
transpose_from(layer);
|
||||||
|
} else {
|
||||||
|
transpose_to(layer);
|
||||||
|
}
|
||||||
|
|
||||||
|
layer.was_transposed = !layer.was_transposed;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn transpose_from(layer: &mut RecordLayer) {
|
||||||
let count_rows = layer.record_values.len();
|
let count_rows = layer.record_values.len();
|
||||||
let count_columns = layer.column_names.len();
|
let count_columns = layer.column_names.len();
|
||||||
|
|
||||||
if layer.was_transposed {
|
if let Some(data) = &mut layer.record_text {
|
||||||
|
pop_first_column(data);
|
||||||
|
*data = _transpose_table(data, count_rows, count_columns - 1);
|
||||||
|
}
|
||||||
|
|
||||||
let headers = pop_first_column(&mut layer.record_values);
|
let headers = pop_first_column(&mut layer.record_values);
|
||||||
let headers = headers
|
let headers = headers
|
||||||
.into_iter()
|
.into_iter()
|
||||||
|
@ -739,26 +753,35 @@ fn transpose_table(layer: &mut RecordLayer) {
|
||||||
|
|
||||||
layer.record_values = data;
|
layer.record_values = data;
|
||||||
layer.column_names = headers;
|
layer.column_names = headers;
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
fn transpose_to(layer: &mut RecordLayer) {
|
||||||
|
let count_rows = layer.record_values.len();
|
||||||
|
let count_columns = layer.column_names.len();
|
||||||
|
|
||||||
|
if let Some(data) = &mut layer.record_text {
|
||||||
|
*data = _transpose_table(data, count_rows, count_columns);
|
||||||
|
for (column, column_name) in layer.column_names.iter().enumerate() {
|
||||||
|
let value = (column_name.to_owned(), Default::default());
|
||||||
|
data[column].insert(0, value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut data = _transpose_table(&layer.record_values, count_rows, count_columns);
|
let mut data = _transpose_table(&layer.record_values, count_rows, count_columns);
|
||||||
|
|
||||||
for (column, column_name) in layer.column_names.iter().enumerate() {
|
for (column, column_name) in layer.column_names.iter().enumerate() {
|
||||||
let value = Value::string(column_name, NuSpan::unknown());
|
let value = Value::string(column_name, NuSpan::unknown());
|
||||||
|
|
||||||
data[column].insert(0, value);
|
data[column].insert(0, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
layer.record_values = data;
|
layer.record_values = data;
|
||||||
layer.column_names = (1..count_rows + 1 + 1).map(|i| i.to_string()).collect();
|
layer.column_names = (1..count_rows + 1 + 1).map(|i| i.to_string()).collect();
|
||||||
|
|
||||||
layer.was_transposed = !layer.was_transposed;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn pop_first_column(values: &mut [Vec<Value>]) -> Vec<Value> {
|
fn pop_first_column<T>(values: &mut [Vec<T>]) -> Vec<T>
|
||||||
let mut data = vec![Value::default(); values.len()];
|
where
|
||||||
|
T: Default + Clone,
|
||||||
|
{
|
||||||
|
let mut data = vec![T::default(); values.len()];
|
||||||
for (row, values) in values.iter_mut().enumerate() {
|
for (row, values) in values.iter_mut().enumerate() {
|
||||||
data[row] = values.remove(0);
|
data[row] = values.remove(0);
|
||||||
}
|
}
|
||||||
|
@ -766,12 +789,11 @@ fn pop_first_column(values: &mut [Vec<Value>]) -> Vec<Value> {
|
||||||
data
|
data
|
||||||
}
|
}
|
||||||
|
|
||||||
fn _transpose_table(
|
fn _transpose_table<T>(values: &[Vec<T>], count_rows: usize, count_columns: usize) -> Vec<Vec<T>>
|
||||||
values: &[Vec<Value>],
|
where
|
||||||
count_rows: usize,
|
T: Clone + Default,
|
||||||
count_columns: usize,
|
{
|
||||||
) -> Vec<Vec<Value>> {
|
let mut data = vec![vec![T::default(); count_rows]; count_columns];
|
||||||
let mut data = vec![vec![Value::default(); count_rows]; count_columns];
|
|
||||||
for (row, values) in values.iter().enumerate() {
|
for (row, values) in values.iter().enumerate() {
|
||||||
for (column, value) in values.iter().enumerate() {
|
for (column, value) in values.iter().enumerate() {
|
||||||
data[column][row].clone_from(value);
|
data[column][row].clone_from(value);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user