mirror of
https://gittea.dev/nova/th.git
synced 2025-10-21 18:30:15 -04:00
improvenments to the renderer
This commit is contained in:
103
dir.c
103
dir.c
@@ -16,6 +16,7 @@ extern unsigned int file_modifiers;
|
||||
extern unsigned int color_count;
|
||||
extern unsigned int terminal_height;
|
||||
extern volatile unsigned long selected_file_current;
|
||||
extern volatile unsigned long selected_file_last;
|
||||
extern color *colors;
|
||||
int (*order_func)() = sort_natural;
|
||||
|
||||
@@ -187,46 +188,9 @@ void print_dir(WINDOW *win, char print_info, unsigned long *dir_file_count, file
|
||||
}
|
||||
for (i = offset_vertical; i < *dir_file_count && i < (terminal_height + offset_vertical); i++) {
|
||||
|
||||
if (print_info) {
|
||||
file_size = dir_content[i].file_size;
|
||||
char size_index = 0;
|
||||
while (file_size > 1) {
|
||||
printed_size=file_size;
|
||||
file_size /= 1024;
|
||||
size_index++;
|
||||
if (size_index >= 6) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
size_char = sizes[size_index-1];
|
||||
if (dir_content[i].file_type == FILE_TYPE_DIR || dir_content[i].file_type == FILE_TYPE_SYMLINK) {
|
||||
offset_back = line_width - (snprintf(NULL,0,"%ld", dir_content[i].file_size) + 1);
|
||||
} else if (size_char =='B') {
|
||||
offset_back = line_width - (snprintf(NULL,0,"%0.0lf %c", printed_size, size_char) + 1);
|
||||
} else {
|
||||
offset_back = line_width - (snprintf(NULL,0,"%0.2lf %c", printed_size, size_char) + 1);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (dir_content[i].status & FILE_STATUS_SELECTED) {
|
||||
is_selected = 1;
|
||||
} else {
|
||||
is_selected = 0;
|
||||
}
|
||||
|
||||
if (dir_content[i].status & FILE_STATUS_SELECTED) {
|
||||
wattron(win, COLOR_PAIR(8));
|
||||
} else {
|
||||
wattron(win, COLOR_PAIR(dir_content[i].color_pair));
|
||||
}
|
||||
if (dir_content[i].status & FILE_STATUS_HOVER) {
|
||||
wattron(win, A_REVERSE);
|
||||
}
|
||||
|
||||
/* shortens the printed file name if it is too long
|
||||
* example input: aaaaaaaa.txt
|
||||
* example output: aaa~.txt
|
||||
* example output: aaa~.txt
|
||||
* if no extension is found, the name will truncate */
|
||||
char *file_name;
|
||||
unsigned long file_name_width = strlen(dir_content[i].file_name);
|
||||
@@ -258,6 +222,45 @@ void print_dir(WINDOW *win, char print_info, unsigned long *dir_file_count, file
|
||||
file_name[file_name_width] = '\0';
|
||||
}
|
||||
|
||||
|
||||
if (print_info) {
|
||||
file_size = dir_content[i].file_size;
|
||||
char size_index = 0;
|
||||
while (file_size > 1) {
|
||||
printed_size=file_size;
|
||||
file_size /= 1024;
|
||||
size_index++;
|
||||
if (size_index >= 6) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
size_char = sizes[size_index-1];
|
||||
if (dir_content[i].file_type == FILE_TYPE_DIR || dir_content[i].file_type == FILE_TYPE_SYMLINK) {
|
||||
offset_back = line_width - (snprintf(NULL,0,"%ld", dir_content[i].file_size) + 1);
|
||||
} else if (size_char =='B') {
|
||||
offset_back = line_width - (snprintf(NULL,0,"%0.0lf %c", printed_size, size_char) + 1);
|
||||
} else {
|
||||
offset_back = line_width - (snprintf(NULL,0,"%0.2lf %c", printed_size, size_char) + 1);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (dir_content[i].status & FILE_STATUS_SELECTED) {
|
||||
is_selected = 1;
|
||||
} else {
|
||||
is_selected = 0;
|
||||
}
|
||||
if (dir_content[i].status & FILE_STATUS_SELECTED) {
|
||||
wattron(win, COLOR_PAIR(8));
|
||||
} else {
|
||||
wattron(win, COLOR_PAIR(dir_content[i].color_pair));
|
||||
}
|
||||
if (dir_content[i].status & FILE_STATUS_HOVER) {
|
||||
wattron(win, A_REVERSE);
|
||||
} else {
|
||||
wattroff(win, A_REVERSE);
|
||||
}
|
||||
|
||||
mvwaddstr(win, i-offset_vertical, 0, bg);
|
||||
if(print_info) {
|
||||
#if SETTINGS_LINE_NUMBERS == 2
|
||||
@@ -298,9 +301,6 @@ void print_dir(WINDOW *win, char print_info, unsigned long *dir_file_count, file
|
||||
free(file_name);
|
||||
}
|
||||
|
||||
if (dir_content[i].status & FILE_STATUS_HOVER) {
|
||||
wattroff(win, A_REVERSE);
|
||||
}
|
||||
if (dir_content[i].status & FILE_STATUS_SELECTED) {
|
||||
wattroff(win, COLOR_PAIR(8));
|
||||
} else {
|
||||
@@ -311,3 +311,24 @@ void print_dir(WINDOW *win, char print_info, unsigned long *dir_file_count, file
|
||||
free(bg);
|
||||
}
|
||||
|
||||
void update_selected_file(){
|
||||
if (selected_file_current >= mid_file_count) {
|
||||
selected_file_current = mid_file_count-1;
|
||||
}
|
||||
if (selected_file_current != selected_file_last) {
|
||||
mid_content[selected_file_last].status &= ~FILE_STATUS_HOVER;
|
||||
}
|
||||
selected_file_last = selected_file_current;
|
||||
|
||||
free(file_current->file_name);
|
||||
file_current->file_name = malloc(strlen(mid_content[selected_file_current].file_name)+1);
|
||||
strcpy(file_current->file_name, mid_content[selected_file_current].file_name);
|
||||
file_current->file_name[strlen(mid_content[selected_file_current].file_name)] = '\0';
|
||||
file_current->file_size = mid_content[selected_file_current].file_size;
|
||||
file_current->file_type = mid_content[selected_file_current].file_type;
|
||||
file_current->color_pair = mid_content[selected_file_current].color_pair;
|
||||
file_current->permissions = mid_content[selected_file_current].permissions;
|
||||
|
||||
mid_content[selected_file_current].status |= FILE_STATUS_HOVER;
|
||||
file_current->status = mid_content[selected_file_current].status;
|
||||
}
|
||||
|
Reference in New Issue
Block a user