Rev 8952 | Rev 8995 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4042 | leency | 1 | |
7878 | leency | 2 | // // |
3 | // SELECTION // |
||
8983 | leency | 4 | // // |
7878 | leency | 5 | //===================================================// |
6 | |||
4896 | punk_joker | 7 | |
8983 | leency | 8 | selected_count[active_panel] = 0; |
9 | if (active_panel) { |
||
10 | selected0.drop(); |
||
11 | } else { |
||
12 | selected1.drop(); |
||
13 | } |
||
14 | } |
||
15 | |||
16 | |||
17 | return selected_count[active_panel]; |
||
18 | } |
||
19 | |||
20 | |||
6646 | leency | 21 | if (n==0) && (strncmp(items.get(n)*304+buf+72,"..",2)==0) return; |
8983 | leency | 22 | if (active_panel) { |
23 | selected0.set(n, state); |
||
24 | } else { |
||
25 | selected1.set(n, state); |
||
26 | } |
||
7278 | leency | 27 | if (state==true) selected_count[active_panel]++; |
8983 | leency | 28 | if (state==false) selected_count[active_panel]--; |
29 | //if (selected_count[active_panel]<0) selected_count[active_panel]=0; |
||
30 | } |
||
4042 | leency | 31 | |
32 | |||
6646 | leency | 33 | if (active_panel) { |
8983 | leency | 34 | return selected0.get(n); |
35 | } else { |
||
36 | return selected1.get(n); |
||
37 | } |
||
38 | } |
||
6646 | leency | 39 | |
40 | |||
7878 | leency | 41 | { |
4042 | leency | 42 | BDVK file_info_count; |
7878 | leency | 43 | DIR_SIZE paste_dir_size; |
44 | |||
45 | |||
46 | if ( file_info_count.isfolder ) { |
||
47 | return paste_dir_size.get(_in_path); |
||
48 | } else { |
||
49 | return 1; |
||
50 | } |
||
51 | } |
||
52 | |||
53 | |||
54 | // // |
||
55 | // COPY AND PASTE // |
||
56 | // // |
||
57 | //===================================================// |
||
58 | byte copy_to[4096]; |
||
59 | byte copy_from[4096]; |
||
60 | bool cut_active = false; |
||
61 | |||
62 | |||
8861 | leency | 63 | |
7878 | leency | 64 | |
8861 | leency | 65 | { |
7878 | leency | 66 | byte copy_t[4096]; |
6602 | leency | 67 | dword buff_data; |
68 | dword path_len = 0; |
||
6597 | punk_joker | 69 | dword size_buf = 0; |
6602 | leency | 70 | dword copy_buf_offset = 0; |
71 | dword i; |
||
7422 | leency | 72 | |
6597 | punk_joker | 73 | |
6602 | leency | 74 | |
7278 | leency | 75 | |
8871 | leency | 76 | |
7878 | leency | 77 | |
7278 | leency | 78 | if (!getSelectedCount()) { |
8983 | leency | 79 | setElementSelectedFlag(files.cur_y, true); |
7278 | leency | 80 | } |
7878 | leency | 81 | |
7278 | leency | 82 | |
8983 | leency | 83 | |
7278 | leency | 84 | |
8943 | leency | 85 | for (i=0; i |
6602 | leency | 86 | { |
87 | if (getElementSelectedFlag(i) == true) { |
||
6646 | leency | 88 | sprintf(#copy_t,"%s/%s",path,items.get(i)*304+buf+72); |
8949 | leency | 89 | path_len = strlen(#copy_t); |
6602 | leency | 90 | size_buf += path_len + 1; |
91 | } |
||
6597 | punk_joker | 92 | } |
93 | buff_data = malloc(size_buf); |
||
6602 | leency | 94 | ESDWORD[buff_data] = size_buf; |
95 | ESDWORD[buff_data+4] = SLOT_DATA_TYPE_RAW; |
||
6791 | leency | 96 | ESINT[buff_data+8] = getSelectedCount(); |
8983 | leency | 97 | copy_buf_offset = buff_data + 10; |
6602 | leency | 98 | for (i=0; i |
99 | { |
||
6597 | punk_joker | 100 | if (getElementSelectedFlag(i) == true) { |
6646 | leency | 101 | sprintf(copy_buf_offset,"%s/%s",path,items.get(i)*304+buf+72); |
8949 | leency | 102 | copy_buf_offset += strlen(copy_buf_offset) + 1; |
6602 | leency | 103 | |
7998 | leency | 104 | |
105 | if (i>=files.first) && (i |
||
106 | PutShadow(files.x+4,i-files.first*files.item_h+files.y,icons16_default.w,files.item_h,1,-3); |
||
8934 | leency | 107 | } |
7998 | leency | 108 | } |
6602 | leency | 109 | } |
6597 | punk_joker | 110 | if (cut_active) { |
7998 | leency | 111 | pause(20); |
112 | List_ReDraw(); |
||
7999 | leency | 113 | } |
7998 | leency | 114 | if (getSelectedCount()==1) setElementSelectedFlag(files.cur_y, false); |
8983 | leency | 115 | Clipboard__SetSlotData(size_buf, buff_data); |
7038 | leency | 116 | free(buff_data); |
6597 | punk_joker | 117 | } |
118 | |||
119 | |||
6600 | punk_joker | 120 | |
6597 | punk_joker | 121 | { |
122 | char copy_rezult; |
||
123 | int j, i, slash_count=0; |
||
8826 | leency | 124 | int paste_elements_count = 0; |
6602 | leency | 125 | dword clipbuf; |
8952 | leency | 126 | dword path_offset; |
6602 | leency | 127 | |
128 | |||
8952 | leency | 129 | if (DSDWORD[clipbuf+4] != 3) return; |
130 | paste_elements_count = ESINT[clipbuf+8]; |
||
131 | path_offset = clipbuf + 10; |
||
132 | |||
7878 | leency | 133 | |
134 | DisplayOperationForm(MOVE_FLAG); |
||
135 | } else { |
||
136 | DisplayOperationForm(COPY_FLAG); |
||
137 | } |
||
138 | |||
139 | |||
8826 | leency | 140 | for (j = 0; j < paste_elements_count; j++) { |
141 | sprintf(#copy_to, "%s/%s", path, path_offset+strrchr(path_offset,'/')); |
||
8949 | leency | 142 | slash_count = 0; |
8826 | leency | 143 | for (i=0; i<=10; i++) { |
144 | if (copy_to[i]=='/') slash_count++; |
||
145 | if (slash_count==3) break; |
||
146 | } |
||
147 | if (strncmp(#copy_to, path_offset, i)!=0) goto _DIFFERENT_DRIVES; |
||
148 | RenameMove(#copy_to+i, path_offset); |
||
149 | if (EAX!=0) goto _DIFFERENT_DRIVES; |
||
150 | path_offset += strlen(path_offset) + 1; |
||
151 | } |
||
152 | DialogExit(); |
||
153 | } |
||
154 | |||
155 | |||
156 | path_offset = clipbuf + 10; |
||
8952 | leency | 157 | for (j = 0; j < paste_elements_count; j++) { |
6602 | leency | 158 | copy_bar.max += GetFilesCount(path_offset); |
7878 | leency | 159 | path_offset += strlen(path_offset) + 1; |
6602 | leency | 160 | } |
5957 | punk_joker | 161 | |
5804 | punk_joker | 162 | |
8952 | leency | 163 | for (j = 0; j < paste_elements_count; j++) { |
6602 | leency | 164 | strcpy(#copy_from, path_offset); |
165 | if (!copy_from) DialogExit(); |
||
5804 | punk_joker | 166 | sprintf(#copy_to, "%s/%s", path, #copy_from+strrchr(#copy_from,'/')); |
8949 | leency | 167 | if (streq(#copy_from,#copy_to)) |
8015 | leency | 168 | { |
5957 | punk_joker | 169 | if (cut_active) continue; |
8015 | leency | 170 | sprintf(#copy_to, "%s/NEW_%s", path, #copy_from+strrchr(#copy_from,'/')); |
8949 | leency | 171 | } |
5957 | punk_joker | 172 | if (strstr(#copy_to, #copy_from)) |
4698 | punk_joker | 173 | { |
174 | notify("'Not possible to copy directory into itself.\nProcess terminated.' -E"); |
||
8861 | leency | 175 | DialogExit(); |
5804 | punk_joker | 176 | } |
4698 | punk_joker | 177 | |
5957 | punk_joker | 178 | |
179 | { |
||
180 | Write_Error(copy_rezult); |
||
181 | if (copy_rezult==8) DialogExit(); //not enough space |
||
7491 | leency | 182 | } |
5957 | punk_joker | 183 | else if (cut_active) |
184 | { |
||
185 | strcpy(#file_path, #copy_from); |
||
6597 | punk_joker | 186 | RecursiveDelete(#copy_from, false); |
8861 | leency | 187 | |
5957 | punk_joker | 188 | |
189 | path_offset += strlen(path_offset) + 1; |
||
6602 | leency | 190 | } |
5931 | punk_joker | 191 | DialogExit(); |
192 | } |
||
6602 | leency | 193 | |
6600 | punk_joker | 194 | |
7878 | leency | 195 | |
196 | // // |
||
197 | // DELETE // |
||
198 | // // |
||
199 | //===================================================// |
||
200 | |||
201 | |||
202 | int RecursiveDelete(dword way, bool show_progress) |
||
8861 | leency | 203 | { |
7878 | leency | 204 | dword dirbuf, fcount, i, filename; |
205 | int error; |
||
206 | char del_from[4096]; |
||
207 | if (dir_exists(way)) |
||
208 | { |
||
209 | if (error = GetDir(#dirbuf, #fcount, way, DIRS_ONLYREAL)) del_error = error; |
||
210 | for (i=0; i |
||
211 | { |
||
212 | //if (CheckEvent()==evReDraw) draw_window(); |
||
213 | filename = i*304+dirbuf+72; |
||
214 | sprintf(#del_from,"%s/%s",way,filename); |
||
215 | if ( ESDWORD[filename-40] & ATR_FOLDER ) { |
||
8944 | leency | 216 | RecursiveDelete(#del_from, true); |
8861 | leency | 217 | } else { |
8944 | leency | 218 | if (show_progress) Operation_Draw_Progress(filename); |
8861 | leency | 219 | if (error = DeleteFile(#del_from)) del_error = error; |
7878 | leency | 220 | } |
221 | } |
||
222 | } |
||
223 | if (error = DeleteFile(way)) del_error = error; |
||
224 | } |
||
225 | |||
226 | |||
8861 | leency | 227 | { |
228 | int j; |
||
229 | int elements_count = 0; |
||
230 | dword clipbuf; |
||
8952 | leency | 231 | dword path_offset; |
8861 | leency | 232 | |
7878 | leency | 233 | |
234 | |||
235 | |||
8952 | leency | 236 | Clipboard__DeleteLastSlot(); |
8861 | leency | 237 | if (DSDWORD[clipbuf+4] != 3) return; |
8952 | leency | 238 | elements_count = ESINT[clipbuf+8]; |
239 | |||
7878 | leency | 240 | |
8952 | leency | 241 | for (j = 0; j < elements_count; j++) { |
8861 | leency | 242 | copy_bar.max += GetFilesCount(path_offset); |
243 | path_offset += strlen(path_offset) + 1; |
||
244 | } |
||
7878 | leency | 245 | |
8861 | leency | 246 | |
8952 | leency | 247 | for (j = 0; j < elements_count; j++) { |
8861 | leency | 248 | RecursiveDelete(path_offset, true); |
249 | path_offset += strlen(path_offset) + 1; |
||
250 | } |
||
251 | if (del_error) Write_Error(del_error); |
||
7878 | leency | 252 | DialogExit(); |
253 | }>>>>=10;>> |
||
8861 | leency | 254 | >=0)>0)> |