Subversion Repositories Kolibri OS

Rev

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

Rev 5620 Rev 5674
1
byte copy_to[4096];
1
byte copy_to[4096];
2
byte copy_from[4096];
2
byte copy_from[4096];
3
byte cut_active=0;
3
byte cut_active=0;
4
 
4
 
5
enum {NOCUT, CUT, COPY_PASTE_END};
5
enum {NOCUT, CUT, COPY_PASTE_END};
6
 
6
 
7
Clipboard clipboard;
7
Clipboard clipboard;
8
 
8
 
9
void Copy(dword pcth, char cut)
9
void Copy(dword pcth, char cut)
10
{
10
{
11
    dword selected_offset2;
11
    dword selected_offset2;
12
    byte copy_t[4096];
12
    byte copy_t[4096];
13
    dword buff_data;
13
    dword buff_data;
14
    int ind = 0;
14
    int ind = 0;
15
      
15
      
16
    if (selected_count)
16
    if (selected_count)
17
	{
17
	{
18
        buff_data = malloc(selected_count*4096+10);
18
        buff_data = malloc(selected_count*4096+10);
19
        ESDWORD[buff_data] = selected_count*4096+10;
19
        ESDWORD[buff_data] = selected_count*4096+10;
20
        ESDWORD[buff_data+4] = 3;
20
        ESDWORD[buff_data+4] = 3;
21
        ESINT[buff_data+8] = selected_count;
21
        ESINT[buff_data+8] = selected_count;
22
        for (i=0; i
22
        for (i=0; i
23
        {
23
        {
24
            selected_offset2 = file_mas[i]*304 + buf+32 + 7;
24
            selected_offset2 = file_mas[i]*304 + buf+32 + 7;
25
            if (ESBYTE[selected_offset2]) {
25
            if (ESBYTE[selected_offset2]) {
26
                strcpy(#copy_t, #path);
26
                strcpy(#copy_t, #path);
27
                strcat(#copy_t, file_mas[i]*304+buf+72);                         
27
                strcat(#copy_t, file_mas[i]*304+buf+72);                         
28
                strlcpy(ind*4096+buff_data+10, #copy_t, 4096);;
28
                strlcpy(ind*4096+buff_data+10, #copy_t, 4096);;
29
                ind++;
29
                ind++;
30
            }
30
            }
31
        }
31
        }
32
		clipboard.SetSlotData(selected_count*4096+10, buff_data);
32
		clipboard.SetSlotData(selected_count*4096+10, buff_data);
33
	}
33
	}
34
	else
34
	else
35
	{
35
	{
36
		buff_data = malloc(4106);
36
		buff_data = malloc(4106);
37
        ESDWORD[buff_data] = 4106;
37
        ESDWORD[buff_data] = 4106;
38
        ESDWORD[buff_data+4] = 3;
38
        ESDWORD[buff_data+4] = 3;
39
        ESINT[buff_data+8] = 1;
39
        ESINT[buff_data+8] = 1;
40
        strlcpy(buff_data+10, #file_path, 4096);;
40
        strlcpy(buff_data+10, #file_path, 4096);;
41
		clipboard.SetSlotData(4106, buff_data);
41
		clipboard.SetSlotData(4106, buff_data);
42
	}
42
	}
43
	cut_active = cut;
43
	cut_active = cut;
44
	free(buff_data);
44
	free(buff_data);
45
}
45
}
46
 
46
 
47
 
47
 
48
void Paste() {
48
void Paste() {
49
	copy_stak = malloc(20000);
49
	copy_stak = malloc(20000);
50
	CreateThread(#PasteThread,copy_stak+20000-4);
50
	CreateThread(#PasteThread,copy_stak+20000-4);
51
}
51
}
52
 
52
 
53
 
53
 
54
void PasteThread()
54
void PasteThread()
55
{
55
{
56
	char copy_rezult;
56
	char copy_rezult;
57
	int j;
57
	int j;
58
	int cnt = 0;
58
	int cnt = 0;
59
	dword buf;
59
	dword buf;
60
	
60
	
61
	buf = clipboard.GetSlotData(clipboard.GetSlotCount()-1);
61
	buf = clipboard.GetSlotData(clipboard.GetSlotCount()-1);
62
	if (DSDWORD[buf+4] != 3) return;
62
	if (DSDWORD[buf+4] != 3) return;
63
	cnt = ESINT[buf+8];
63
	cnt = ESINT[buf+8];
64
	for (j = 0; j < cnt; j++) {
64
	for (j = 0; j < cnt; j++) {
65
		strlcpy(#copy_from, j*4096+buf+10, 4096);
65
		strlcpy(#copy_from, j*4096+buf+10, 4096);
66
		if (!copy_from) CopyExit();
66
		if (!copy_from) CopyExit();
67
		strcpy(#copy_to, #path);
67
		strcpy(#copy_to, #path);
68
		strcat(#copy_to, #copy_from+strrchr(#copy_from,'/'));
68
		strcat(#copy_to, #copy_from+strrchr(#copy_from,'/'));
69
		if (!strcmp(#copy_from,#copy_to))
69
		if (!strcmp(#copy_from,#copy_to))
70
		{
70
		{
71
			strcpy(#copy_to, #path);
71
			strcpy(#copy_to, #path);
72
			strcat(#copy_to, "new_");
72
			strcat(#copy_to, "new_");
73
			strcat(#copy_to, #copy_from+strrchr(#copy_from,'/'));
73
			strcat(#copy_to, #copy_from+strrchr(#copy_from,'/'));
74
		}
74
		}
75
		if (strstr(#copy_to, #copy_from))
75
		if (strstr(#copy_to, #copy_from))
76
		{
76
		{
77
			notify("Copy directory into itself is a bad idea...");
77
			notify("Copy directory into itself is a bad idea...");
78
			CopyExit();
78
			CopyExit();
79
		}
79
		}
80
 
80
 
81
		DisplayCopyfForm();
81
		DisplayCopyfForm();
82
 
82
 
83
		if (copy_rezult = copyf(#copy_from,#copy_to))
83
		if (copy_rezult = copyf(#copy_from,#copy_to))
84
		{
84
		{
85
			Write_Error(copy_rezult);
85
			Write_Error(copy_rezult);
86
		}
86
		}
87
		else if (cut_active)
87
		else if (cut_active)
88
		{
88
		{
89
			strcpy(#file_path, #copy_from);
89
			strcpy(#file_path, #copy_from);
90
			Del_File(true);
90
			Del_File(true);
91
			
91
			
92
		}
92
		}
93
	}
93
	}
94
	if (cut_active)
94
	if (cut_active)
95
	{
95
	{
96
		cut_active=false;
96
		cut_active=false;
97
	}
97
	}
98
	if (info_after_copy) notify(INFO_AFTER_COPY);
98
	if (info_after_copy) notify(INFO_AFTER_COPY);
99
	CopyExit();
99
	CopyExit();
100
}
100
}
101
 
101
 
102
#define WIN_COPY_W 345
102
#define WIN_COPY_W 345
103
#define WIN_COPY_H 80
103
#define WIN_COPY_H 80
104
proc_info Copy_Form;
104
proc_info Copy_Form;
105
 
105
 
106
void DisplayCopyfForm()
106
void DisplayCopyfForm()
107
{
107
{
108
	  switch(CheckEvent())
108
	  switch(CheckEvent())
109
	  {
109
	  {
110
		 case evButton:
110
		 case evButton:
111
			notify(T_CANCEL_PASTE);
111
			notify(T_CANCEL_PASTE);
112
			CopyExit();
112
			CopyExit();
113
			break;
113
			break;
114
		 
114
		 
115
		case evReDraw:
115
		case evReDraw:
116
			DefineAndDrawWindow(Form.left+Form.width-200,Form.top+90,WIN_COPY_W,GetSkinHeight()+WIN_COPY_H,0x34,sc.work,T_PASTE_WINDOW_TITLE);
116
			DefineAndDrawWindow(Form.left+Form.width-200,Form.top+90,WIN_COPY_W,GetSkinHeight()+WIN_COPY_H,0x34,system.color.work,T_PASTE_WINDOW_TITLE);
117
			GetProcessInfo(#Copy_Form, SelfInfo);
117
			GetProcessInfo(#Copy_Form, SelfInfo);
118
			WriteText(45, 11, 0x80, sc.work_text, T_PASTE_WINDOW_TEXT);
118
			WriteText(45, 11, 0x80, system.color.work_text, T_PASTE_WINDOW_TEXT);
119
			DrawFlatButton(Copy_Form.cwidth - 90, Copy_Form.cheight - 32, 80, 22, 10, sc.work_button, T_PASTE_WINDOW_BUTTON);
119
			DrawFlatButton(Copy_Form.cwidth - 90, Copy_Form.cheight - 32, 80, 22, 10, system.color.work_button, T_PASTE_WINDOW_BUTTON);
120
			DrawBar(8, 10, 32, 32, 0xFFFfff);
120
			DrawBar(8, 10, 32, 32, 0xFFFfff);
121
			break;
121
			break;
122
	  }
122
	  }
123
}
123
}
124
 
124
 
125
void CopyExit() {
125
void CopyExit() {
126
	action_buf = COPY_PASTE_END;
126
	action_buf = COPY_PASTE_END;
127
	ActivateWindow(GetProcessSlot(Form.ID));
127
	ActivateWindow(GetProcessSlot(Form.ID));
128
	ExitProcess();
128
	ExitProcess();
129
}
129
}
130
 
130
 
131
 
131
 
132
void copyf_Draw_Progress(dword copying_filename) {
132
void copyf_Draw_Progress(dword copying_filename) {
133
	if (Copy_Form.cwidth==0) return;
133
	if (Copy_Form.cwidth==0) return;
134
	DisplayCopyfForm();
134
	DisplayCopyfForm();
135
	Put_icon(copying_filename+strrchr(copying_filename,'.'), 16, 19, 0xFFFfff, 0);
135
	Put_icon(copying_filename+strrchr(copying_filename,'.'), 16, 19, 0xFFFfff, 0);
136
	DrawBar(45, 29, Copy_Form.cwidth-40, 10, sc.work);
136
	DrawBar(45, 29, Copy_Form.cwidth-40, 10, system.color.work);
137
	WriteText(45, 29, 0x80, sc.work_text, copying_filename);
137
	WriteText(45, 29, 0x80, system.color.work_text, copying_filename);
138
}
138
}
139
139
140
140