Subversion Repositories Kolibri OS

Rev

Rev 5459 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5459 Rev 5481
1
//Leency 2008-2014
1
//Leency 2008-2014
2
 
2
 
3
#ifdef LANG_RUS
3
#ifdef LANG_RUS
4
	?define INFO_AFTER_COPY "Š®¯¨à®¢ ­¨¥ § ¢¥à襭®"
4
	?define INFO_AFTER_COPY "Š®¯¨à®¢ ­¨¥ § ¢¥à襭®"
5
#elif LANG_EST
5
#elif LANG_EST
6
	?define INFO_AFTER_COPY "Copy finished"
6
	?define INFO_AFTER_COPY "Copy finished"
7
#else
7
#else
8
	?define INFO_AFTER_COPY "Copy finished"
8
	?define INFO_AFTER_COPY "Copy finished"
9
#endif
9
#endif
10
 
10
 
11
byte copy_to[4096];
11
byte copy_to[4096];
12
byte cut_active=0;
12
byte cut_active=0;
13
 
13
 
14
enum {NOCUT, CUT, COPY_PASTE_END};
14
enum {NOCUT, CUT, COPY_PASTE_END};
15
 
15
 
16
Clipboard clipboard;
16
Clipboard clipboard;
17
 
17
 
18
void Copy(dword pcth, char cut)
18
void Copy(dword pcth, char cut)
19
{
19
{
20
        dword selected_offset2;
20
        dword selected_offset2;
21
        byte copy_t[4096];
21
        byte copy_t[4096];
22
        int cont = 0;
22
        int cont = 0;
23
        dword buff_data;
23
        dword buff_data;
24
        int ind = 0;
24
        int ind = 0;
25
        
25
        
26
        for (i=0; i
26
        for (i=0; i
27
        {
27
        {
28
                selected_offset2 = file_mas[i]*304 + buf+32 + 7;
28
                selected_offset2 = file_mas[i]*304 + buf+32 + 7;
29
                if (ESBYTE[selected_offset2]) cont++;
29
                if (ESBYTE[selected_offset2]) cont++;
30
        }
30
        }
31
		if (!cont)
31
		if (!cont)
32
		{
32
		{
33
            buff_data = malloc(4106);
33
            buff_data = malloc(4106);
34
            ESDWORD[buff_data] = 4106;
34
            ESDWORD[buff_data] = 4106;
35
            ESDWORD[buff_data+4] = 3;
35
            ESDWORD[buff_data+4] = 3;
36
            ESINT[buff_data+8] = 1;
36
            ESINT[buff_data+8] = 1;
37
            strlcpy(buff_data+10, #file_path, 4096);;
37
            strlcpy(buff_data+10, #file_path, 4096);;
38
			clipboard.SetSlotData(4106, buff_data);
38
			clipboard.SetSlotData(4106, buff_data);
39
	    }
39
	    }
40
		else
40
		else
41
		{
41
		{
42
            buff_data = malloc(cont*4096+10);
42
            buff_data = malloc(cont*4096+10);
43
            ESDWORD[buff_data] = cont*4096+10;
43
            ESDWORD[buff_data] = cont*4096+10;
44
            ESDWORD[buff_data+4] = 3;
44
            ESDWORD[buff_data+4] = 3;
45
            ESINT[buff_data+8] = cont;
45
            ESINT[buff_data+8] = cont;
46
            for (i=0; i
46
            for (i=0; i
47
            {
47
            {
48
                    selected_offset2 = file_mas[i]*304 + buf+32 + 7;
48
                    selected_offset2 = file_mas[i]*304 + buf+32 + 7;
49
                    if (ESBYTE[selected_offset2]) {
49
                    if (ESBYTE[selected_offset2]) {
50
                            strcpy(#copy_t, #path);
50
                            strcpy(#copy_t, #path);
51
                            strcat(#copy_t, file_mas[i]*304+buf+72);
51
                            strcat(#copy_t, file_mas[i]*304+buf+72);
52
                            
52
                            
53
                            strlcpy(ind*4096+buff_data+10, #copy_t, 4096);;
53
                            strlcpy(ind*4096+buff_data+10, #copy_t, 4096);;
54
                            ind++;
54
                            ind++;
55
                    }
55
                    }
56
            }
56
            }
57
			clipboard.SetSlotData(cont*4096+10, buff_data);
57
			clipboard.SetSlotData(cont*4096+10, buff_data);
58
		}
58
		}
59
	cut_active = cut;
59
	cut_active = cut;
60
	free(buff_data);
60
	free(buff_data);
61
}
61
}
62
 
62
 
63
void copyf_Draw_Progress(dword filename) {
63
void copyf_Draw_Progress(dword filename) {
64
	#define WIN_W 300
64
	#define WIN_W 300
65
	#define WIN_H 50
65
	#define WIN_H 50
66
	DefineAndDrawWindow(Form.left+Form.width-200,Form.top+90,WIN_W,GetSkinHeight()+WIN_H-1,0x34,sc.work,T_PASTE_WINDOW);
66
	DefineAndDrawWindow(Form.left+Form.width-200,Form.top+90,WIN_W,GetSkinHeight()+WIN_H-1,0x34,sc.work,T_PASTE_WINDOW);
67
	WriteText(5,8, 0x80, sc.work_text, T_PASTE_WINDOW_TEXT);
67
	WriteText(5,8, 0x80, sc.work_text, T_PASTE_WINDOW_TEXT);
68
	DrawBar(5, 26, WIN_W-10, 10, sc.work);
68
	DrawBar(5, 26, WIN_W-10, 10, sc.work);
69
	WriteText(5,26, 0x80, sc.work_text, filename);
69
	WriteText(5,26, 0x80, sc.work_text, filename);
70
	if (CheckEvent()==evButton) 
70
	if (CheckEvent()==evButton) 
71
	{
71
	{
72
		notify(T_CANCEL_PASTE);
72
		notify(T_CANCEL_PASTE);
73
		CopyExit();
73
		CopyExit();
74
	} 
74
	} 
75
}
75
}
76
 
76
 
77
void Paste()
77
void Paste()
78
{
78
{
79
	char copy_rezult;
79
	char copy_rezult;
80
	byte copy_from[4096];
80
	byte copy_from[4096];
81
	int j;
81
	int j;
82
    int cnt = 0;
82
    int cnt = 0;
83
	dword buf;
83
	dword buf;
84
	
84
	
85
	buf = clipboard.GetSlotData(clipboard.GetSlotCount()-1);
85
	buf = clipboard.GetSlotData(clipboard.GetSlotCount()-1);
86
    if (DSDWORD[buf+4] != 3) return;
86
    if (DSDWORD[buf+4] != 3) return;
87
	cnt = ESINT[buf+8];
87
	cnt = ESINT[buf+8];
88
    for (j = 0; j < cnt; j++) {
88
    for (j = 0; j < cnt; j++) {
89
	    debugi(j);
-
 
90
		strlcpy(#copy_from, j*4096+buf+10, 4096);
89
		strlcpy(#copy_from, j*4096+buf+10, 4096);
91
		debugln(#copy_from);
-
 
92
		if (!copy_from) CopyExit();
90
		if (!copy_from) CopyExit();
93
		strcpy(#copy_to, #path);
91
		strcpy(#copy_to, #path);
94
		strcat(#copy_to, #copy_from+strrchr(#copy_from,'/'));
92
		strcat(#copy_to, #copy_from+strrchr(#copy_from,'/'));
95
		if (!strcmp(#copy_from,#copy_to))
93
		if (!strcmp(#copy_from,#copy_to))
96
		{
94
		{
97
			strcpy(#copy_to, #path);
95
			strcpy(#copy_to, #path);
98
			strcat(#copy_to, "new_");
96
			strcat(#copy_to, "new_");
99
			strcat(#copy_to, #copy_from+strrchr(#copy_from,'/'));
97
			strcat(#copy_to, #copy_from+strrchr(#copy_from,'/'));
100
		}
98
		}
101
		if (strstr(#copy_to, #copy_from))
99
		if (strstr(#copy_to, #copy_from))
102
		{
100
		{
103
			notify("Copy directory into itself is a bad idea...");
101
			notify("Copy directory into itself is a bad idea...");
104
			CopyExit();
102
			CopyExit();
105
		}
103
		}
106
		if (copy_rezult = copyf(#copy_from,#copy_to))
104
		if (copy_rezult = copyf(#copy_from,#copy_to))
107
		{
105
		{
108
			Write_Error(copy_rezult);
106
			Write_Error(copy_rezult);
109
		}
107
		}
110
	
108
	
111
		else if (cut_active)
109
		else if (cut_active)
112
		{
110
		{
113
			strcpy(#file_path, #copy_from);
111
			strcpy(#file_path, #copy_from);
114
			Del_File(true);
112
			Del_File(true);
115
			
113
			
116
		}
114
		}
117
	}
115
	}
118
	if (cut_active)
116
	if (cut_active)
119
	{
117
	{
120
		cut_active=false;
118
		cut_active=false;
121
	}
119
	}
122
	if (info_after_copy) notify(INFO_AFTER_COPY);
120
	if (info_after_copy) notify(INFO_AFTER_COPY);
123
	CopyExit();
121
	CopyExit();
124
}
122
}
125
 
123
 
126
void CopyExit()
124
void CopyExit()
127
{
125
{
128
	action_buf = COPY_PASTE_END;
126
	action_buf = COPY_PASTE_END;
129
	ActivateWindow(GetProcessSlot(Form.ID));
127
	ActivateWindow(GetProcessSlot(Form.ID));
130
	ExitProcess();
128
	ExitProcess();
131
}
129
}