mirror of
https://github.com/KolibriOS/kolibrios.git
synced 2024-11-27 11:19:37 +03:00
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:
parent
faea42b346
commit
252074d8fd
@ -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;}
|
||||
}
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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 "” ©«"
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user