Eolite 4.02: asc and desc sorting order, save current file selection after changing sorting order (thanks lev for idea)

git-svn-id: svn://kolibrios.org@7490 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Kirill Lipatov (Leency) 2018-10-19 21:13:36 +00:00
parent faea42b346
commit 252074d8fd
5 changed files with 57 additions and 39 deletions

View File

@ -1,5 +1,5 @@
//Leency, Veliant, Punk_Joker, PavelYakov & KolibriOS Team 2008-2018
//GNU GPL licence.
//GNU GPL license.
// 70.5 - get volume info and label
@ -96,7 +96,8 @@ int sc_slider_h;
int action_buf;
int rand_n;
char sort_num=2;
char sort_type=2;
bool sort_desc=false;
int active_panel=1;
libimg_image icons16_default;
@ -131,6 +132,7 @@ byte cmd_free=0;
void main()
{
char selected_filename[256];
dword id;
byte count_sl = 0;
signed x_old, y_old, dif_x, dif_y, adif_x, adif_y;
@ -370,9 +372,13 @@ void main()
Paste();
break;
case 31...33: //sorting
sort_num = id - 30;
id -= 30;
if (sort_type == id) sort_desc ^= 1;
else sort_type = id;
strcpy(#selected_filename, #file_name);
DrawList();
Open_Dir(#path,WITH_REDRAW);
SelectFileByName(#selected_filename);
break;
case 50...60: //Actions
FnProcess(id-50);
@ -434,35 +440,35 @@ void main()
SystemDiscs.Click(key_scancode);
}
break;
case 45: //Ctrl+X
case SCAN_CODE_KEY_X:
Copy(#file_path, CUT);
break;
case 46: //Ctrl+C
case SCAN_CODE_KEY_C:
Copy(#file_path, NOCUT);
break;
case 47: //Ctrl+V
case SCAN_CODE_KEY_V:
Paste();
break;
case 032: //Ctrl+D - set as bg
case SCAN_CODE_KEY_D: //set image as bg
strlcpy(#temp, "\\S__",4);
strcat(#temp, #file_path);
RunProgram("/sys/media/kiv", #temp);
break;
case 049: //Ctrl+N - create new window
case SCAN_CODE_KEY_N: //create new window
if (Form.left==98) MoveSize(Form.left-20,Form.top-20,OLD,OLD);
RunProgram(I_Path, #path);
break;
case 050: //Ctrl+M
case SCAN_CODE_KEY_M:
Open_Dir(#inactive_path,WITH_REDRAW);
break;
case SCAN_CODE_ENTER: //Ctrl+Enter
case SCAN_CODE_ENTER:
if (!itdir) ShowOpenWithDialog();
else Open(1);
break;
case 030: //Ctrl+A - select all files
case SCAN_CODE_KEY_A:
EventSelectAllFiles(true);
break;
case 022: //Ctrl+U - unselect all files
case SCAN_CODE_KEY_U: //unselect all files
selected_count = 0;
EventSelectAllFiles(false);
break;
@ -485,7 +491,7 @@ void main()
ChangeActivePanel();
DrawFilePanels();
break;
case 093: //menu
case SCAN_CODE_MENU:
menu_call_mouse=0;
menu_stak = malloc(4096);
CreateThread(#FileMenu,menu_stak+4092);
@ -500,7 +506,7 @@ void main()
List_ReDraw();
DrawStatusBar();
break;
case 059...068: //F1-F10
case SCAN_CODE_F1...SCAN_CODE_F10:
FnProcess(key_scancode-58);
break;
default:
@ -558,7 +564,7 @@ void draw_window()
if (Form.status_window>2) return;
if (Form.height < 350) { MoveSize(OLD,OLD,OLD,350); return; }
if (Form.width < 480) { MoveSize(OLD,OLD,480,OLD); return; }
GetProcessInfo(#Form, SelfInfo); //if win_size changed
GetProcessInfo(#Form, SelfInfo);
ESDWORD[#toolbar_pal] = col_work;
ESDWORD[#toolbar_pal+4] = MixColors(0, col_work, 35);
PutPaletteImage(#toolbar, 246, 34, 0, 0, 8, #toolbar_pal);
@ -584,15 +590,17 @@ void draw_window()
void DrawList()
{
word sorting_arrow_x;
dword sorting_arrow_t = "\x19";
if (sort_desc) sorting_arrow_t = "\x18";
DrawFlatButtonSmall(files.x, files.y-17, files.w - 141,16,31,T_FILE);
DrawFlatButtonSmall(files.x + files.w - 141, files.y-17,73,16,32,T_TYPE);
DrawFlatButtonSmall(files.x + files.w - 68, files.y-17,68,16,33,T_SIZE);
DrawFlatButtonSmall(files.x + files.w, files.y-17,16,16, 0,"\x18");
DrawFlatButtonSmall(files.x + files.w,files.y+files.h-16,16,16,0,"\x19");
if (sort_num==1) sorting_arrow_x = files.w - 141 / 2 + files.x + 18;
if (sort_num==2) sorting_arrow_x = files.x + files.w - 90;
if (sort_num==3) sorting_arrow_x = strlen(T_SIZE)*3-30+files.x+files.w;
WriteText(sorting_arrow_x,files.y-12,0x80, system.color.work_text,"\x19");
if (sort_type==1) sorting_arrow_x = files.w - 141 / 2 + files.x + 18;
if (sort_type==2) sorting_arrow_x = files.x + files.w - 90;
if (sort_type==3) sorting_arrow_x = strlen(T_SIZE)*3-30+files.x+files.w;
WriteText(sorting_arrow_x,files.y-12,0x80, system.color.work_text, sorting_arrow_t);
DrawBar(files.x+files.w,files.y,1,files.h,col_graph);
if (two_panels.checked) && (files.x<5) DrawBar(files.x+files.w+16,files.y,1,files.h,col_graph);
}
@ -822,14 +830,14 @@ void Open_Dir(dword dir_path, redraw){
inline Sorting()
{
dword k=0, l=1;
dword d=0, f=1;
int j=0;
dword file_off;
if (!strcmp(#path,"/")) //do not sort root folder
{
for(k=1;k<files.count;k++;) file_mas[k]=k;
count_dir = k;
for(d=1;d<files.count;d++;) file_mas[d]=d;
count_dir = d;
return;
}
for (j=files.count-1, file_off=files.count-1*304+buf+32; j>=0; j--, file_off-=304;) //files | folders
@ -837,24 +845,29 @@ inline Sorting()
if (!show_real_names.checked) strttl(file_off+40);
if (TestBit(ESDWORD[file_off],4)) //directory?
{
file_mas[k]=j;
k++;
file_mas[d]=j;
d++;
}
else
{
file_mas[files.count-l]=j;
l++;
file_mas[files.count-f]=j;
f++;
}
}
count_dir = k;
count_dir = d;
//sorting: files first, then folders
Sort_by_Name(0,k-1);
if (sort_num==1) Sort_by_Name(k,files.count-1);
else if (sort_num==2) Sort_by_Type(k,files.count-1);
else if (sort_num==3) Sort_by_Size(k,files.count-1);
Sort_by_Name(0,d-1);
if (sort_type==1) Sort_by_Name(d,files.count-1);
else if (sort_type==2) Sort_by_Type(d,files.count-1);
else if (sort_type==3) Sort_by_Size(d,files.count-1);
//reversed sorting
if (sort_desc) {
for (j=0; j<f/2; j++) file_mas[files.count-j-1]><file_mas[d+j];
//if (sort_type==1) for (j=0; j<d/2; j++) file_mas[d-j]><file_mas[j];
}
//make ".." first item in list
if (k>0) && (strncmp(file_mas[0]*304+buf+72,"..",2)!=0)
for(k--; k>0; k--;) if (!strncmp(file_mas[k]*304+buf+72,"..",2)) {file_mas[k]><file_mas[0]; break;}
if (d>0) && (strncmp(file_mas[0]*304+buf+72,"..",2)!=0)
for(d--; d>0; d--;) if (!strncmp(file_mas[d]*304+buf+72,"..",2)) {file_mas[d]><file_mas[0]; break;}
}

View File

@ -11,7 +11,7 @@ char *file_captions[] = {
"<EFBFBD>¥à¥¨¬¥­®¢ âì", "F2",207,
"“¤ «¨âì", "Del",108,
"Ž¡­®¢¨âì ¯ ¯ªã", "F5",109,
"‘¢®©á⢠", "",110,
"‘¢®©á⢠", "F8",110,
0, 0, 0};
#elif LANG_EST
char *file_captions[] = {
@ -25,7 +25,7 @@ char *file_captions[] = {
"Nimeta ümber", "F2",207,
"Kustuta", "Del",108,
"Värskenda", "F5",109,
"Properties", "",110,
"Properties", "F8",110,
0, 0, 0};
#else
char *file_captions[] = {
@ -39,7 +39,7 @@ char *file_captions[] = {
"Rename", "F2",207,
"Delete", "Del",108,
"Refresh", "F5",109,
"Properties", "",110,
"Properties", "F8",110,
0, 0, 0};
#endif

View File

@ -1,5 +1,5 @@
#define TITLE "Eolite File Manager 4.01"
#define ABOUT_TITLE "EOLITE 4.01"
#define TITLE "Eolite File Manager 4.02"
#define ABOUT_TITLE "EOLITE 4.02"
#ifdef LANG_RUS
?define T_FILE "” ©«"

View File

@ -31,6 +31,7 @@
#define SCAN_CODE_DEL 083
#define SCAN_CODE_INS 082
#define SCAN_CODE_SPACE 057
#define SCAN_CODE_MENU 093
#define SCAN_CODE_LEFT 075
#define SCAN_CODE_RIGHT 077
@ -57,19 +58,23 @@
#define SCAN_CODE_F11 087
#define SCAN_CODE_F12 088
#define SCAN_CODE_KEY_A 030
#define SCAN_CODE_KEY_B 048
#define SCAN_CODE_KEY_C 046
#define SCAN_CODE_KEY_D 032
#define SCAN_CODE_KEY_E 018
#define SCAN_CODE_KEY_F 033
#define SCAN_CODE_KEY_H 035
#define SCAN_CODE_KEY_I 023
#define SCAN_CODE_KEY_L 038
#define SCAN_CODE_KEY_M 050
#define SCAN_CODE_KEY_N 049
#define SCAN_CODE_KEY_O 024
#define SCAN_CODE_KEY_P 025
#define SCAN_CODE_KEY_R 019
#define SCAN_CODE_KEY_S 031
#define SCAN_CODE_KEY_T 020
#define SCAN_CODE_KEY_U 022
#define SCAN_CODE_KEY_V 047
#define SCAN_CODE_KEY_X 045
#define SCAN_CODE_KEY_Y 021

View File

@ -183,7 +183,7 @@ gui_str_server db 'Server:',0
gui_str_port db 'Port:',0
gui_str_path db 'Path:',0
gui_str_error db 'Error! Check log file for details',0
gui_str_no_srvr db 'Error! Please set server adress',0
gui_str_no_srvr db 'Error! Please set server address',0
gui_str_null db ' ',0
str_error_addr dd gui_str_null