forked from KolibriOS/kolibrios
Eolite/KFM2: 'Delete' feature rewritten (thanks IgorA for the report) - now always run in a separate process, other bugfixes
git-svn-id: svn://kolibrios.org@8861 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
b436a2dc22
commit
b3571d494b
@ -3,8 +3,9 @@
|
||||
|
||||
// 70.5 - get volume info and label
|
||||
|
||||
#define TITLE "Eolite File Manager 5 Beta"
|
||||
#define ABOUT_TITLE "EOLITE 5 Beta"
|
||||
#define ABOUT_TITLE "EOLITE 5 Beta2"
|
||||
#define TITLE_EOLITE "Eolite File Manager 5 Beta2"
|
||||
#define TITLE_KFM "Kolibri File Manager 2 Beta2";
|
||||
|
||||
#ifndef AUTOBUILD
|
||||
#include "lang.h--"
|
||||
@ -125,7 +126,7 @@ _ini ini;
|
||||
|
||||
char scroll_used=false;
|
||||
|
||||
dword about_stak=0,properties_stak=0,settings_stak=0,delete_stak=0;
|
||||
dword about_stak=0,properties_stak=0,settings_stak=0;
|
||||
|
||||
proc_info Form;
|
||||
int sc_slider_h;
|
||||
@ -199,10 +200,8 @@ void handle_param()
|
||||
properties_dialog();
|
||||
ExitProcess();
|
||||
case 'd':
|
||||
strcpy(#file_path, p + 3);
|
||||
itdir = dir_exists(#file_path);
|
||||
DisplayOperationForm(DELETE_FLAG);
|
||||
DeleteSingleElement();
|
||||
strcpy(#path, p + 3);
|
||||
DeleteThread();
|
||||
ExitProcess();
|
||||
case 'v':
|
||||
cut_active = ESBYTE[p+2] - '0';
|
||||
@ -244,7 +243,6 @@ void main()
|
||||
ESBYTE[0] = NULL;
|
||||
|
||||
SystemDiscs.Get();
|
||||
|
||||
Open_Dir(#path,ONLY_OPEN);
|
||||
strcpy(#inactive_path, #path);
|
||||
llist_copy(#files_inactive, #files);
|
||||
@ -297,7 +295,6 @@ void main()
|
||||
if (getElementSelectedFlag(files.cur_y) == false) selected_count = 0; //on redraw selection would be flashed, see [L001]
|
||||
EventShowListMenu();
|
||||
}
|
||||
//break;
|
||||
}
|
||||
|
||||
if (mouse.x>=files.x+files.w) && (mouse.x<=files.x+files.w+16) && (mouse.y>files.y-17) && (mouse.y<files.y)
|
||||
@ -345,16 +342,12 @@ void main()
|
||||
if (efm) && (mouse.y > files.y) && (mouse.down) {
|
||||
if (mouse.x<Form.cwidth/2)
|
||||
{
|
||||
if (active_panel!=1)
|
||||
{
|
||||
if (active_panel!=1) {
|
||||
active_panel = 1;
|
||||
ChangeActivePanel();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (active_panel!=2)
|
||||
{
|
||||
} else {
|
||||
if (active_panel!=2) {
|
||||
active_panel = 2;
|
||||
ChangeActivePanel();
|
||||
}
|
||||
@ -436,16 +429,13 @@ void main()
|
||||
|
||||
if (new_element_active) || (del_active) || (dev_popin_active_on_panel)
|
||||
{
|
||||
if (dev_popin_active_on_panel) {
|
||||
if (key_scancode == SCAN_CODE_ESC) EventClosePopinForm();
|
||||
}
|
||||
if (key_scancode == SCAN_CODE_ESC) EventClosePopinForm();
|
||||
|
||||
if (del_active) {
|
||||
if (key_scancode == SCAN_CODE_ENTER) EventDelete();
|
||||
if (key_scancode == SCAN_CODE_ESC) EventClosePopinForm();
|
||||
}
|
||||
if (new_element_active) {
|
||||
if (key_scancode == SCAN_CODE_ENTER) NewElement();
|
||||
if (key_scancode == SCAN_CODE_ESC) EventClosePopinForm();
|
||||
EAX = key_editbox;
|
||||
edit_box_key stdcall (#new_file_ed);
|
||||
}
|
||||
@ -481,18 +471,17 @@ void main()
|
||||
case SCAN_CODE_1...SCAN_CODE_10:
|
||||
key_scancode-=2;
|
||||
if (key_scancode >= SystemDiscs.list.count) break;
|
||||
if (!efm)
|
||||
{
|
||||
if (!efm) {
|
||||
DrawRectangle(17,key_scancode*16+74,159,16, 0); //display click
|
||||
pause(7);
|
||||
}
|
||||
SystemDiscs.Click(key_scancode);
|
||||
break;
|
||||
case SCAN_CODE_KEY_X:
|
||||
EventCopy(CUT);
|
||||
CopyFilesListToClipboard(CUT);
|
||||
break;
|
||||
case SCAN_CODE_KEY_C:
|
||||
EventCopy(NOCUT);
|
||||
CopyFilesListToClipboard(COPY);
|
||||
break;
|
||||
case SCAN_CODE_KEY_G:
|
||||
EventOpenConsoleHere();
|
||||
@ -562,20 +551,18 @@ void main()
|
||||
default:
|
||||
EventSelectFileByKeyPress();
|
||||
}
|
||||
break;
|
||||
break;
|
||||
case evIPC:
|
||||
case evReDraw:
|
||||
draw_window();
|
||||
if (CheckActiveProcess(Form.ID)) && (GetMenuClick()) break;
|
||||
if (action_buf==OPERATION_END)
|
||||
{
|
||||
if (action_buf==OPERATION_END) {
|
||||
EventRefresh();
|
||||
action_buf=0;
|
||||
}
|
||||
break;
|
||||
break;
|
||||
default:
|
||||
if (Form.status_window>2) break;
|
||||
EventRefreshDisksAndFolders();
|
||||
if (Form.status_window<=2) EventRefreshDisksAndFolders();
|
||||
}
|
||||
|
||||
if(cmd_free)
|
||||
@ -583,7 +570,6 @@ void main()
|
||||
if(cmd_free==2) about_stak=free(about_stak);
|
||||
else if(cmd_free==3) properties_stak=free(properties_stak);
|
||||
else if(cmd_free==4) settings_stak=free(settings_stak);
|
||||
else if(cmd_free==6) delete_stak=free(delete_stak);
|
||||
cmd_free = false;
|
||||
}
|
||||
}
|
||||
@ -594,7 +580,7 @@ void draw_window()
|
||||
incn x;
|
||||
dword title;
|
||||
if (show_status_bar.checked) status_bar_h = STATUS_BAR_H; else status_bar_h = 0;
|
||||
if (efm) title = "Kolibri File Manager 2 - BETA"; else title = TITLE;
|
||||
if (efm) title = TITLE_KFM; else title = TITLE_EOLITE;
|
||||
DefineAndDrawWindow(Form.left+rand_n,Form.top+rand_n,Form.width,Form.height,0x73,NULL,title,0);
|
||||
GetProcessInfo(#Form, SelfInfo);
|
||||
if (Form.status_window>2) return;
|
||||
@ -624,8 +610,8 @@ void draw_window()
|
||||
ESDWORD[#toolbar_pal] = sc.work;
|
||||
ESDWORD[#toolbar_pal+4] = MixColors(0, sc.work, 35);
|
||||
PutPaletteImage(#toolbar, 246, 34, 0, 0, 8, #toolbar_pal);
|
||||
for (i=0; i<3; i++) DefineHiddenButton(toolbar_buttons_x[i]+2,7,31-5,29-5,21+i);
|
||||
for (i=3; i<6; i++) DefineHiddenButton(toolbar_buttons_x[i], 5,31, 29, 21+i);
|
||||
for (i=0; i<3; i++) DefineHiddenButton(toolbar_buttons_x[i]+2,7,31-5,29-5,BACK_BTN+i);
|
||||
for (i=3; i<6; i++) DefineHiddenButton(toolbar_buttons_x[i], 5,31, 29, BACK_BTN+i);
|
||||
DrawBar(127, 8, 1, 25, sc.work_graph);
|
||||
DrawBar(246,0, Form.cwidth - 246, 34, sc.work);
|
||||
DrawDot(Form.cwidth-17,12);
|
||||
@ -1193,7 +1179,7 @@ void FnProcess(byte N)
|
||||
break;
|
||||
case 5:
|
||||
if (efm) {
|
||||
EventCopy(false);
|
||||
CopyFilesListToClipboard(COPY);
|
||||
EventPaste(#inactive_path);
|
||||
} else {
|
||||
EventRefresh();
|
||||
@ -1201,7 +1187,7 @@ void FnProcess(byte N)
|
||||
break;
|
||||
case 6:
|
||||
if (efm) {
|
||||
EventCopy(true);
|
||||
CopyFilesListToClipboard(CUT);
|
||||
EventPaste(#inactive_path);
|
||||
}
|
||||
break;
|
||||
@ -1384,16 +1370,12 @@ void EventPaste(dword _into_path) {
|
||||
}
|
||||
|
||||
void EventDelete()
|
||||
char line_param[4096+5];
|
||||
{
|
||||
char line_param[4096+5];
|
||||
CopyFilesListToClipboard(DELETE);
|
||||
EventClosePopinForm();
|
||||
if (!selected_count) {
|
||||
sprintf(#line_param, "-d %s", #file_path);
|
||||
RunProgram(#program_path, #line_param);
|
||||
} else {
|
||||
delete_stak = malloc(40000);
|
||||
CreateThread(#DeleteSelectedElements,delete_stak+40000-4);
|
||||
}
|
||||
sprintf(#line_param, "-d %s", #file_path);
|
||||
RunProgram(#program_path, #line_param);
|
||||
}
|
||||
|
||||
void EventClosePopinForm()
|
||||
@ -1402,8 +1384,6 @@ void EventClosePopinForm()
|
||||
new_element_active = 0;
|
||||
dev_popin_active_on_panel = 0;
|
||||
draw_window();
|
||||
//DeleteButton(POPUP_BTN1);
|
||||
//DeleteButton(POPUP_BTN2);
|
||||
}
|
||||
|
||||
void EventShowProperties()
|
||||
@ -1453,8 +1433,8 @@ void EventToolbarButtonClick(int _btid)
|
||||
case BACK_BTN: EventHistoryGoBack(); break;
|
||||
case FWRD_BTN: EventHistoryGoForward(); break;
|
||||
case GOUP_BTN: Dir_Up(); break;
|
||||
case COPY_BTN: EventCopy(CUT); break;
|
||||
case CUT_BTN: EventCopy(NOCUT); break;
|
||||
case COPY_BTN: CopyFilesListToClipboard(CUT); break;
|
||||
case CUT_BTN: CopyFilesListToClipboard(COPY); break;
|
||||
case PASTE_BTN:EventPaste(#path); break;
|
||||
}
|
||||
}
|
||||
|
@ -45,9 +45,9 @@ byte copy_to[4096];
|
||||
byte copy_from[4096];
|
||||
bool cut_active = false;
|
||||
|
||||
enum {NOCUT, CUT};
|
||||
enum {COPY, CUT, DELETE};
|
||||
|
||||
void EventCopy(bool _cut_active)
|
||||
void CopyFilesListToClipboard(bool _cut_active)
|
||||
{
|
||||
byte copy_t[4096];
|
||||
dword buff_data;
|
||||
@ -58,7 +58,7 @@ void EventCopy(bool _cut_active)
|
||||
|
||||
if (files.count<=0) return; //no files
|
||||
|
||||
cut_active = _cut_active;
|
||||
if (cut_active!=DELETE) cut_active = _cut_active;
|
||||
|
||||
//if no element selected by "Insert" key, then we copy current element
|
||||
if (!selected_count) {
|
||||
@ -88,8 +88,6 @@ void EventCopy(bool _cut_active)
|
||||
sprintf(copy_buf_offset,"%s/%s",#path,items.get(i)*304+buf+72);
|
||||
copy_buf_offset += strlen(copy_buf_offset) + 1;
|
||||
|
||||
//setElementSelectedFlag(i, false);
|
||||
|
||||
if (cut_active) {
|
||||
if (i>=files.first) && (i<files.first+files.visible)
|
||||
PutShadow(files.x+4,i-files.first*files.item_h+files.y,16,files.item_h,1,-3);
|
||||
@ -138,7 +136,6 @@ void PasteThread()
|
||||
if (EAX!=0) goto _DIFFERENT_DRIVES;
|
||||
path_offset += strlen(path_offset) + 1;
|
||||
}
|
||||
cut_active=false;
|
||||
DialogExit();
|
||||
}
|
||||
|
||||
@ -161,7 +158,7 @@ _DIFFERENT_DRIVES:
|
||||
}
|
||||
if (strstr(#copy_to, #copy_from))
|
||||
{
|
||||
notify("Copy directory into itself is a bad idea...");
|
||||
notify("'Not possible to copy directory into itself.\nProcess terminated.' -E");
|
||||
DialogExit();
|
||||
}
|
||||
|
||||
@ -173,12 +170,11 @@ _DIFFERENT_DRIVES:
|
||||
else if (cut_active)
|
||||
{
|
||||
strcpy(#file_path, #copy_from);
|
||||
Del_File2(#copy_from, 0);
|
||||
RecursiveDelete(#copy_from, false);
|
||||
|
||||
}
|
||||
path_offset += strlen(path_offset) + 1;
|
||||
}
|
||||
cut_active=false;
|
||||
DialogExit();
|
||||
}
|
||||
|
||||
@ -190,7 +186,7 @@ _DIFFERENT_DRIVES:
|
||||
//===================================================//
|
||||
|
||||
int del_error;
|
||||
int Del_File2(dword way, sh_progr)
|
||||
int RecursiveDelete(dword way, bool show_progress)
|
||||
{
|
||||
dword dirbuf, fcount, i, filename;
|
||||
int error;
|
||||
@ -205,11 +201,11 @@ int Del_File2(dword way, sh_progr)
|
||||
sprintf(#del_from,"%s/%s",way,filename);
|
||||
if ( TestBit(ESDWORD[filename-40], 4) )
|
||||
{
|
||||
Del_File2(#del_from, 1);
|
||||
RecursiveDelete(#del_from, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sh_progr) Operation_Draw_Progress(filename);
|
||||
if (show_progress) Operation_Draw_Progress(filename);
|
||||
if (error = DeleteFile(#del_from)) del_error = error;
|
||||
}
|
||||
}
|
||||
@ -217,51 +213,31 @@ int Del_File2(dword way, sh_progr)
|
||||
if (error = DeleteFile(way)) del_error = error;
|
||||
}
|
||||
|
||||
void DeleteSingleElement()
|
||||
void DeleteThread()
|
||||
{
|
||||
DIR_SIZE delete_dir_size;
|
||||
del_error = NULL;
|
||||
|
||||
if (itdir) {
|
||||
copy_bar.max = delete_dir_size.get(#file_path);
|
||||
} else {
|
||||
copy_bar.max = 1;
|
||||
}
|
||||
|
||||
Del_File2(#file_path, 1);
|
||||
|
||||
if (del_error) Write_Error(del_error);
|
||||
DialogExit();
|
||||
}
|
||||
|
||||
void DeleteSelectedElements()
|
||||
{
|
||||
byte del_from[4096];
|
||||
int i;
|
||||
int j;
|
||||
int elements_count = 0;
|
||||
dword buf;
|
||||
dword path_offset;
|
||||
|
||||
DisplayOperationForm(DELETE_FLAG);
|
||||
|
||||
if (!selected_count) { DeleteSingleElement(); return; }
|
||||
buf = Clipboard__GetSlotData(Clipboard__GetSlotCount()-1);
|
||||
Clipboard__DeleteLastSlot();
|
||||
if (DSDWORD[buf+4] != 3) return;
|
||||
elements_count = ESINT[buf+8];
|
||||
|
||||
for (i=0; i<files.count; i++)
|
||||
{
|
||||
if (getElementSelectedFlag(i) == true) {
|
||||
sprintf(#del_from,"%s/%s",#path,items.get(i)*304+buf+72);
|
||||
copy_bar.max += GetFilesCount(#del_from);
|
||||
}
|
||||
path_offset = buf + 10;
|
||||
for (j = 0; j < elements_count; j++) {
|
||||
copy_bar.max += GetFilesCount(path_offset);
|
||||
path_offset += strlen(path_offset) + 1;
|
||||
}
|
||||
|
||||
del_error = 0;
|
||||
|
||||
for (i=0; i<files.count; i++)
|
||||
{
|
||||
if (getElementSelectedFlag(i) == true) {
|
||||
sprintf(#del_from,"%s/%s", #path, items.get(i)*304+buf+72);
|
||||
Del_File2(#del_from, 1);
|
||||
}
|
||||
path_offset = buf + 10;
|
||||
for (j = 0; j < elements_count; j++) {
|
||||
RecursiveDelete(path_offset, true);
|
||||
path_offset += strlen(path_offset) + 1;
|
||||
}
|
||||
|
||||
if (del_error) Write_Error(del_error);
|
||||
cmd_free = 6;
|
||||
DialogExit();
|
||||
}
|
@ -103,8 +103,8 @@ void EventMenuClick(dword _id)
|
||||
if (active_menu == MENU_FILE) switch(_id) {
|
||||
case 1: EventOpen(0); break;
|
||||
case 2: ShowOpenWithDialog(); break;
|
||||
case 3: EventCopy(NOCUT); break;
|
||||
case 4: EventCopy(CUT); break;
|
||||
case 3: CopyFilesListToClipboard(COPY); break;
|
||||
case 4: CopyFilesListToClipboard(CUT); break;
|
||||
case 5: EventPaste(#path); break;
|
||||
case 6: FnProcess(2); break;
|
||||
case 7: Del_Form(); break;
|
||||
@ -112,8 +112,8 @@ void EventMenuClick(dword _id)
|
||||
}
|
||||
if (active_menu == MENU_DIR) switch(_id) {
|
||||
case 1: EventOpen(0); break;
|
||||
case 2: EventCopy(NOCUT); break;
|
||||
case 3: EventCopy(CUT); break;
|
||||
case 2: CopyFilesListToClipboard(COPY); break;
|
||||
case 3: CopyFilesListToClipboard(CUT); break;
|
||||
case 4: EventPaste(#path); break;
|
||||
case 5: Del_Form(); break;
|
||||
case 6: FnProcess(1); break;
|
||||
|
@ -42,7 +42,6 @@ void DisplayOperationForm(int operation_flag)
|
||||
switch(CheckEvent())
|
||||
{
|
||||
case evButton:
|
||||
notify(T_CANCEL_PASTE);
|
||||
DialogExit();
|
||||
break;
|
||||
|
||||
|
@ -18,7 +18,6 @@
|
||||
?define T_MOVE_WINDOW_TITLE "<EFBFBD>¥à¥¬¥é î..."
|
||||
?define T_DELETE_WINDOW_TITLE "“¤ «ïî..."
|
||||
?define T_ABORT_WINDOW_BUTTON "<EFBFBD>à¥à¢ âì"
|
||||
?define T_CANCEL_PASTE "Š®¯¨à®¢ ¨¥ ¯à¥ªà 饮. <20> ¯ª ᪮¯¨à®¢ ¥ ¯®«®áâìî."
|
||||
?define T_SELECT_APP_TO_OPEN_WITH "‚ë¡¥à¨â¥ ¯à®£à ¬¬ã ¤«ï ®âªàëâ¨ï ä ©« "
|
||||
?define DEL_MORE_FILES_1 "¢ë¡à ë¥ í«¥¬¥âë ("
|
||||
?define DEL_MORE_FILES_2 " èâ.)?"
|
||||
@ -48,7 +47,6 @@
|
||||
?define T_MOVE_WINDOW_TITLE "Moving..."
|
||||
?define T_DELETE_WINDOW_TITLE "Deleting..."
|
||||
?define T_ABORT_WINDOW_BUTTON "Abort"
|
||||
?define T_CANCEL_PASTE "Copy process terminated. Folder copied incompletely."
|
||||
?define T_SELECT_APP_TO_OPEN_WITH "Select application to open file"
|
||||
?define DEL_MORE_FILES_1 "selected items("
|
||||
?define DEL_MORE_FILES_2 " pcs.)?"
|
||||
|
Loading…
Reference in New Issue
Block a user