forked from KolibriOS/kolibrios
Eolite 3.2: deleting in another thread; progressbar while deleting
git-svn-id: svn://kolibrios.org@5804 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
1ed8c3d59c
commit
5d4d8a053c
@ -13,7 +13,6 @@
|
||||
#include "..\lib\file_system.h"
|
||||
#include "..\lib\gui.h"
|
||||
#include "..\lib\list_box.h"
|
||||
#include "..\lib\copyf.h"
|
||||
#include "..\lib\random.h"
|
||||
#include "..\lib\font.h"
|
||||
//obj
|
||||
@ -65,7 +64,7 @@ dword eolite_ini_path;
|
||||
|
||||
char scroll_used=false;
|
||||
|
||||
dword menu_stak,about_stak,properties_stak,settings_stak,copy_stak;
|
||||
dword menu_stak,about_stak,properties_stak,settings_stak,copy_stak,delete_stak;
|
||||
|
||||
proc_info Form;
|
||||
int mouse_dd, sc_slider_h, kolibrios_drive;
|
||||
@ -88,7 +87,10 @@ PathShow_data PathShow = {0, 17,250, 6, 250, 0, 0, 0x0, 0xFFFfff, #path, #temp,
|
||||
PathShow_data FileShow = {0, 56,215, 6, 100, 0, 0, 0x0, 0xFFFfff, #file_name, #temp, 0};
|
||||
byte cmd_free=0;
|
||||
#include "include\translations.h"
|
||||
#include "include\fs.h"
|
||||
#include "include\settings.h"
|
||||
#include "include\progress_dialog.h"
|
||||
#include "..\lib\copyf.h"
|
||||
#include "include\copy.h"
|
||||
#include "include\gui.h"
|
||||
#include "include\sorting.h"
|
||||
@ -300,7 +302,7 @@ void main()
|
||||
}
|
||||
if (del_active)
|
||||
{
|
||||
if (id==301) || (id==302) Del_File(302-id);
|
||||
if (id==301) || (id==302) Del_File(302-id);
|
||||
break;
|
||||
}
|
||||
if (new_element_active)
|
||||
@ -492,7 +494,7 @@ void main()
|
||||
draw_window();
|
||||
if (action_buf)
|
||||
{
|
||||
if (action_buf==COPY_PASTE_END)
|
||||
if (action_buf==OPERATION_END)
|
||||
{
|
||||
FnProcess(5);
|
||||
SelectFileByName(#copy_to+strrchr(#copy_to,'/'));
|
||||
@ -800,10 +802,6 @@ void Del_Form()
|
||||
byte f_count[128];
|
||||
int dform_x = files.w - 220 / 2 + files.x;
|
||||
if (!strncmp(#file_name,".",2)) || (!strncmp(#file_name,"..",2)) return;
|
||||
if (del_active==2)
|
||||
{
|
||||
if (itdir) ShowMessage(WAIT_DELETING_FOLDER, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!files.count) return;
|
||||
@ -840,7 +838,7 @@ void Del_Form()
|
||||
}
|
||||
|
||||
int del_error;
|
||||
int Del_File2(dword way)
|
||||
int Del_File2(dword way, sh_progr)
|
||||
{
|
||||
dword dirbuf, fcount, i, filename;
|
||||
int error;
|
||||
@ -855,10 +853,11 @@ int Del_File2(dword way)
|
||||
sprintf(#del_from,"%s/%s",way,filename);
|
||||
if ( TestBit(ESDWORD[filename-40], 4) )
|
||||
{
|
||||
Del_File2(#del_from);
|
||||
Del_File2(#del_from, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sh_progr) Operation_Draw_Progress(#del_from);
|
||||
if (error = DeleteFile(#del_from)) del_error = error;
|
||||
}
|
||||
}
|
||||
@ -866,19 +865,43 @@ int Del_File2(dword way)
|
||||
if (error = DeleteFile(way)) del_error = error;
|
||||
}
|
||||
|
||||
|
||||
void Del_File(byte dodel)
|
||||
void Del_File_Thread()
|
||||
{
|
||||
byte del_from[4096];
|
||||
dword selected_offset2;
|
||||
int tst, count, i;
|
||||
|
||||
if (dodel==true)
|
||||
{
|
||||
del_active=2;
|
||||
if (itdir) ShowMessage(WAIT_DELETING_FOLDER, 0);
|
||||
del_error = 0;
|
||||
file_count_copy = 0;
|
||||
copy_bar.value = 0;
|
||||
operation_flag = DELETE_FLAG;
|
||||
|
||||
if (selected_count)
|
||||
{
|
||||
for (i=0; i<files.count; i++)
|
||||
{
|
||||
selected_offset2 = file_mas[i]*304 + buf+32 + 7;
|
||||
if (ESBYTE[selected_offset2]) {
|
||||
sprintf(#del_from,"%s%s",#path,file_mas[i]*304+buf+72);
|
||||
GetFileInfo(#del_from, #file_info_count);
|
||||
if ( file_info_count.isfolder ) DirFileCount(#del_from);
|
||||
else file_count_copy++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (itdir) DirFileCount(#file_path);
|
||||
else file_count_copy++;
|
||||
}
|
||||
|
||||
copy_bar.max = file_count_copy;
|
||||
|
||||
//if (dodel==true)
|
||||
//{
|
||||
//del_active=2;
|
||||
//if (itdir) ShowMessage(WAIT_DELETING_FOLDER, 0);
|
||||
del_error = 0;
|
||||
DisplayOperationForm();
|
||||
if (selected_count)
|
||||
{
|
||||
for (i=0; i<files.count; i++)
|
||||
@ -886,22 +909,32 @@ void Del_File(byte dodel)
|
||||
selected_offset2 = file_mas[i]*304 + buf+32 + 7;
|
||||
if (ESBYTE[selected_offset2]) {
|
||||
sprintf(#del_from,"%s%s",#path,file_mas[i]*304+buf+72);
|
||||
Del_File2(#del_from);
|
||||
Del_File2(#del_from, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Del_File2(#file_path);
|
||||
Del_File2(#file_path, 1);
|
||||
}
|
||||
if (del_error) Write_Error(del_error);
|
||||
}
|
||||
del_active=0;
|
||||
DeleteButton(301);
|
||||
DeleteButton(302);
|
||||
Open_Dir(#path,WITH_REDRAW);
|
||||
DialogExit();
|
||||
//}
|
||||
//del_active=0;
|
||||
//DeleteButton(301);
|
||||
//DeleteButton(302);
|
||||
//Open_Dir(#path,WITH_REDRAW);
|
||||
}
|
||||
|
||||
void Del_File(byte dodel) {
|
||||
del_active=0;
|
||||
if (dodel)
|
||||
{
|
||||
delete_stak = malloc(20000);
|
||||
CreateThread(#Del_File_Thread,delete_stak+20000-4);
|
||||
}
|
||||
else draw_window();
|
||||
}
|
||||
|
||||
void SelectFileByName(dword that_file)
|
||||
{
|
||||
|
@ -3,9 +3,7 @@ byte copy_to[4096];
|
||||
byte copy_from[4096];
|
||||
byte cut_active=0;
|
||||
|
||||
progress_bar copy_bar = {0,16,49,50,20,0,0,1,0xFFFFFF,0x00FF00,0x000000};
|
||||
|
||||
enum {NOCUT, CUT, COPY_PASTE_END};
|
||||
enum {NOCUT, CUT};
|
||||
|
||||
Clipboard clipboard;
|
||||
|
||||
@ -52,37 +50,6 @@ void Paste() {
|
||||
CreateThread(#PasteThread,copy_stak+20000-4);
|
||||
}
|
||||
|
||||
BDVK file_info_count;
|
||||
int file_count_copy;
|
||||
|
||||
void DirFileCount(dword way)
|
||||
{
|
||||
dword dirbuf, fcount, i, filename;
|
||||
dword cur_file;
|
||||
if (isdir(way))
|
||||
{
|
||||
cur_file = malloc(4096);
|
||||
// In the process of recursive descent, memory must be allocated dynamically, because the static memory -> was a bug !!! But unfortunately pass away to sacrifice speed.
|
||||
GetDir(#dirbuf, #fcount, way, DIRS_ONLYREAL);
|
||||
for (i=0; i<fcount; i++)
|
||||
{
|
||||
filename = i*304+dirbuf+72;
|
||||
sprintf(cur_file,"%s/%s",way,filename);
|
||||
|
||||
if (TestBit(ESDWORD[filename-40], 4) )
|
||||
{
|
||||
file_count_copy++;
|
||||
DirFileCount(cur_file);
|
||||
}
|
||||
else
|
||||
{
|
||||
file_count_copy++;
|
||||
}
|
||||
}
|
||||
free(cur_file);
|
||||
}
|
||||
}
|
||||
|
||||
void PasteThread()
|
||||
{
|
||||
char copy_rezult;
|
||||
@ -102,10 +69,14 @@ void PasteThread()
|
||||
else file_count_copy++;
|
||||
}
|
||||
copy_bar.max = file_count_copy;
|
||||
DisplayCopyfForm();
|
||||
|
||||
if (cut_active) operation_flag = MOVE_FLAG;
|
||||
else operation_flag = COPY_FLAG;
|
||||
|
||||
DisplayOperationForm();
|
||||
for (j = 0; j < cnt; j++) {
|
||||
strlcpy(#copy_from, j*4096+buf+10, 4096);
|
||||
if (!copy_from) CopyExit();
|
||||
if (!copy_from) DialogExit();
|
||||
strcpy(#copy_to, #path);
|
||||
strcat(#copy_to, #copy_from+strrchr(#copy_from,'/'));
|
||||
if (!strcmp(#copy_from,#copy_to))
|
||||
@ -117,7 +88,7 @@ void PasteThread()
|
||||
if (strstr(#copy_to, #copy_from))
|
||||
{
|
||||
notify("Copy directory into itself is a bad idea...");
|
||||
CopyExit();
|
||||
DialogExit();
|
||||
}
|
||||
|
||||
if (copy_rezult = copyf(#copy_from,#copy_to))
|
||||
@ -126,8 +97,8 @@ void PasteThread()
|
||||
}
|
||||
else if (cut_active)
|
||||
{
|
||||
strcpy(#file_path, #copy_from);
|
||||
Del_File(true);
|
||||
//strcpy(#file_path, #copy_from);
|
||||
Del_File2(#copy_from, 0);
|
||||
|
||||
}
|
||||
}
|
||||
@ -136,52 +107,5 @@ void PasteThread()
|
||||
cut_active=false;
|
||||
}
|
||||
if (info_after_copy) notify(INFO_AFTER_COPY);
|
||||
CopyExit();
|
||||
}
|
||||
|
||||
#define WIN_COPY_W 345
|
||||
#define WIN_COPY_H 110
|
||||
proc_info Copy_Form;
|
||||
|
||||
void DisplayCopyfForm()
|
||||
{
|
||||
switch(CheckEvent())
|
||||
{
|
||||
case evButton:
|
||||
notify(T_CANCEL_PASTE);
|
||||
CopyExit();
|
||||
break;
|
||||
|
||||
case evReDraw:
|
||||
DefineAndDrawWindow(Form.left+Form.width-200,Form.top+90,WIN_COPY_W,GetSkinHeight()+WIN_COPY_H,0x34,0xFFFFFF,T_PASTE_WINDOW_TITLE);
|
||||
GetProcessInfo(#Copy_Form, SelfInfo);
|
||||
WriteText(45, 11, 0x80, system.color.work_text, T_PASTE_WINDOW_TEXT);
|
||||
DrawFlatButton(Copy_Form.cwidth - 96, Copy_Form.cheight - 32, 80, 22, 10, system.color.work_button, T_PASTE_WINDOW_BUTTON);
|
||||
DrawBar(8, 10, 32, 32, 0xFFFfff);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void CopyExit() {
|
||||
action_buf = COPY_PASTE_END;
|
||||
ActivateWindow(GetProcessSlot(Form.ID));
|
||||
ExitProcess();
|
||||
}
|
||||
|
||||
|
||||
void copyf_Draw_Progress(dword copying_filename) {
|
||||
if (Copy_Form.cwidth==0)
|
||||
{
|
||||
copy_bar.value++;
|
||||
return;
|
||||
}
|
||||
copy_bar.width = Copy_Form.cwidth-32;
|
||||
DisplayCopyfForm();
|
||||
Put_icon(copying_filename+strrchr(copying_filename,'.'), 16, 19, 0xFFFfff, 0);
|
||||
DrawBar(45, 29, Copy_Form.cwidth-45, 10, 0xFFFFFF);
|
||||
WriteText(45, 29, 0x80, 0x000000, copying_filename);
|
||||
progressbar_draw stdcall (#copy_bar);
|
||||
progressbar_progress stdcall (#copy_bar);
|
||||
//copy_bar.value++;
|
||||
//pause(10);
|
||||
DialogExit();
|
||||
}
|
31
programs/cmm/eolite/include/fs.h
Normal file
31
programs/cmm/eolite/include/fs.h
Normal file
@ -0,0 +1,31 @@
|
||||
BDVK file_info_count;
|
||||
int file_count_copy;
|
||||
|
||||
void DirFileCount(dword way)
|
||||
{
|
||||
dword dirbuf, fcount, i, filename;
|
||||
dword cur_file;
|
||||
if (isdir(way))
|
||||
{
|
||||
cur_file = malloc(4096);
|
||||
// In the process of recursive descent, memory must be allocated dynamically, because the static memory -> was a bug !!! But unfortunately pass away to sacrifice speed.
|
||||
GetDir(#dirbuf, #fcount, way, DIRS_ONLYREAL);
|
||||
for (i=0; i<fcount; i++)
|
||||
{
|
||||
filename = i*304+dirbuf+72;
|
||||
sprintf(cur_file,"%s/%s",way,filename);
|
||||
|
||||
if (TestBit(ESDWORD[filename-40], 4) )
|
||||
{
|
||||
file_count_copy++;
|
||||
DirFileCount(cur_file);
|
||||
}
|
||||
else
|
||||
{
|
||||
file_count_copy++;
|
||||
}
|
||||
}
|
||||
free(cur_file);
|
||||
}
|
||||
}
|
||||
|
58
programs/cmm/eolite/include/progress_dialog.h
Normal file
58
programs/cmm/eolite/include/progress_dialog.h
Normal file
@ -0,0 +1,58 @@
|
||||
#define WIN_DIALOG_W 345
|
||||
#define WIN_DIALOG_H 110
|
||||
proc_info Dialog_Form;
|
||||
|
||||
progress_bar copy_bar = {0,16,49,50,20,0,0,1,0xFFFFFF,0x00FF00,0x000000};
|
||||
|
||||
enum {COPY_FLAG, MOVE_FLAG, DELETE_FLAG, OPERATION_END};
|
||||
int operation_flag;
|
||||
|
||||
void DisplayOperationForm()
|
||||
{
|
||||
switch(CheckEvent())
|
||||
{
|
||||
case evButton:
|
||||
notify(T_CANCEL_PASTE);
|
||||
DialogExit();
|
||||
break;
|
||||
|
||||
case evReDraw:
|
||||
if (operation_flag==COPY_FLAG) DefineAndDrawWindow(Form.left+Form.width-200,Form.top+90,WIN_DIALOG_W,GetSkinHeight()+WIN_DIALOG_H,0x34,0xFFFFFF,T_COPY_WINDOW_TITLE);
|
||||
else if (operation_flag==MOVE_FLAG) DefineAndDrawWindow(Form.left+Form.width-200,Form.top+90,WIN_DIALOG_W,GetSkinHeight()+WIN_DIALOG_H,0x34,0xFFFFFF,T_MOVE_WINDOW_TITLE);
|
||||
else DefineAndDrawWindow(Form.left+Form.width-200,Form.top+90,WIN_DIALOG_W,GetSkinHeight()+WIN_DIALOG_H,0x34,0xFFFFFF,T_DELETE_WINDOW_TITLE);
|
||||
|
||||
GetProcessInfo(#Dialog_Form, SelfInfo);
|
||||
|
||||
if (operation_flag==COPY_FLAG) WriteText(45, 11, 0x80, system.color.work_text, T_COPY_WINDOW_TEXT);
|
||||
else if (operation_flag==MOVE_FLAG) WriteText(45, 11, 0x80, system.color.work_text, T_MOVE_WINDOW_TEXT);
|
||||
else WriteText(45, 11, 0x80, system.color.work_text, T_DELETE_WINDOW_TEXT);
|
||||
|
||||
DrawFlatButton(Dialog_Form.cwidth - 96, Dialog_Form.cheight - 32, 80, 22, 10, system.color.work_button, T_ABORT_WINDOW_BUTTON);
|
||||
DrawBar(8, 10, 32, 32, 0xFFFfff);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void DialogExit() {
|
||||
action_buf = OPERATION_END;
|
||||
ActivateWindow(GetProcessSlot(Form.ID));
|
||||
ExitProcess();
|
||||
}
|
||||
|
||||
|
||||
void Operation_Draw_Progress(dword copying_filename) {
|
||||
if (Dialog_Form.cwidth==0)
|
||||
{
|
||||
copy_bar.value++;
|
||||
return;
|
||||
}
|
||||
copy_bar.width = Dialog_Form.cwidth-32;
|
||||
DisplayOperationForm();
|
||||
Put_icon(copying_filename+strrchr(copying_filename,'.'), 16, 19, 0xFFFfff, 0);
|
||||
DrawBar(45, 29, Dialog_Form.cwidth-45, 10, 0xFFFFFF);
|
||||
WriteText(45, 29, 0x80, 0x000000, copying_filename);
|
||||
progressbar_draw stdcall (#copy_bar);
|
||||
progressbar_progress stdcall (#copy_bar);
|
||||
//copy_bar.value++;
|
||||
pause(50);
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
#define TITLE "Eolite File Manager v3.14"
|
||||
#define ABOUT_TITLE "Eolite 3.14"
|
||||
#define TITLE "Eolite File Manager v3.2"
|
||||
#define ABOUT_TITLE "Eolite 3.2"
|
||||
|
||||
#ifdef LANG_RUS
|
||||
?define T_FILE "” ©«"
|
||||
@ -15,12 +15,17 @@
|
||||
?define T_RENAME "<EFBFBD>¥à¥¨¬¥®¢ âì"
|
||||
?define FS_ITEM_ALREADY_EXISTS "'<27>«¥¬¥â á â ª¨¬ ¨¬¥¥¬ 㦥 áãé¥áâ¢ã¥â' -E"
|
||||
?define T_DEL_ERROR_1 "Žè¨¡ª . <20> ¯ª ¥ ¯ãáâ ï."
|
||||
?define WAIT_DELETING_FOLDER "“¤ «ï¥âáï ¯ ¯ª . <20>®¤®¦¨â¥..."
|
||||
?define NOT_CREATE_FOLDER "<EFBFBD>¥ 㤠«®áì ᮧ¤ âì ¯ ¯ªã."
|
||||
?define NOT_CREATE_FILE "<EFBFBD>¥ 㤠«®áì ᮧ¤ âì ä ©«."
|
||||
?define T_PASTE_WINDOW_TITLE "Š®¯¨àãî..."
|
||||
?define T_PASTE_WINDOW_TEXT "Š®¯¨àã¥âáï ä ©«:"
|
||||
?define T_PASTE_WINDOW_BUTTON "<EFBFBD>à¥à¢ âì"
|
||||
?define T_COPY_WINDOW_TITLE "Š®¯¨àãî..."
|
||||
?define T_COPY_WINDOW_TEXT "Š®¯¨àã¥âáï ä ©«:"
|
||||
?define T_MOVE_WINDOW_TITLE "<EFBFBD>¥à¥¬¥é î..."
|
||||
?define T_MOVE_WINDOW_TEXT "<EFBFBD>¥à¥¬¥é ¥âáï ä ©«:"
|
||||
?define T_DELETE_WINDOW_TITLE "“¤ «ïî..."
|
||||
?define T_DELETE_WINDOW_TEXT "“¤ «ï¥âáï ä ©«:"
|
||||
?define T_ABORT_WINDOW_BUTTON "<EFBFBD>à¥à¢ âì"
|
||||
|
||||
|
||||
?define INFO_AFTER_COPY "Š®¯¨à®¢ ¨¥ § ¢¥à襮"
|
||||
?define T_CANCEL_PASTE "Š®¯¨à®¢ ¨¥ ¯à¥ªà 饮. <20> ¯ª ᪮¯¨à®¢ ¥ ¯®«®áâìî."
|
||||
?define T_SELECT_APP_TO_OPEN_WITH "‚ë¡¥à¨â¥ ¯à®£à ¬¬ã ¤«ï ®âªàëâ¨ï ä ©« "
|
||||
@ -43,9 +48,13 @@
|
||||
?define WAIT_DELETING_FOLDER "Deleting folder. Please, wait..."
|
||||
?define NOT_CREATE_FOLDER "Kataloogi ei saa luua."
|
||||
?define NOT_CREATE_FILE "Faili ei saa luua."
|
||||
?define T_PASTE_WINDOW_TITLE "Kopeerin..."
|
||||
?define T_PASTE_WINDOW_TEXT "Kopeerin faili:"
|
||||
?define T_PASTE_WINDOW_BUTTON "Abort"
|
||||
?define T_COPY_WINDOW_TITLE "Copying..."
|
||||
?define T_COPY_WINDOW_TEXT "Copying file:"
|
||||
?define T_MOVE_WINDOW_TITLE "Moving..."
|
||||
?define T_MOVE_WINDOW_TEXT "Moving file:"
|
||||
?define T_DELETE_WINDOW_TITLE "Deleting..."
|
||||
?define T_DELETE_WINDOW_TEXT "Deleting file:"
|
||||
?define T_ABORT_WINDOW_BUTTON "Abort"
|
||||
?define INFO_AFTER_COPY "Copy finished"
|
||||
?define T_CANCEL_PASTE "Copy process terminated. Folder copied incompletely."
|
||||
?define T_SELECT_APP_TO_OPEN_WITH "Select application to open file"
|
||||
@ -68,9 +77,13 @@
|
||||
?define WAIT_DELETING_FOLDER "Deleting folder. Please, wait..."
|
||||
?define NOT_CREATE_FOLDER "Folder can not be created."
|
||||
?define NOT_CREATE_FILE "File can not be created."
|
||||
?define T_PASTE_WINDOW_TITLE "Copying..."
|
||||
?define T_PASTE_WINDOW_TEXT "Copying file:"
|
||||
?define T_PASTE_WINDOW_BUTTON "Abort"
|
||||
?define T_COPY_WINDOW_TITLE "Copying..."
|
||||
?define T_COPY_WINDOW_TEXT "Copying file:"
|
||||
?define T_MOVE_WINDOW_TITLE "Moving..."
|
||||
?define T_MOVE_WINDOW_TEXT "Moving file:"
|
||||
?define T_DELETE_WINDOW_TITLE "Deleting..."
|
||||
?define T_DELETE_WINDOW_TEXT "Deleting file:"
|
||||
?define T_ABORT_WINDOW_BUTTON "Abort"
|
||||
?define INFO_AFTER_COPY "Copy finished"
|
||||
?define T_CANCEL_PASTE "Copy process terminated. Folder copied incompletely."
|
||||
?define T_SELECT_APP_TO_OPEN_WITH "Select application to open file"
|
||||
|
Loading…
Reference in New Issue
Block a user