Rev 5772 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5772 | Rev 5773 | ||
---|---|---|---|
1 | CustomCursor CursorPointer; |
1 | CustomCursor CursorPointer; |
2 | dword CursorFile = FROM "../TWB/pointer.cur"; |
2 | dword CursorFile = FROM "../TWB/pointer.cur"; |
3 | 3 | ||
4 | #define NOLINE 0 |
4 | #define NOLINE 0 |
5 | #define UNDERLINE 1 |
5 | #define UNDERLINE 1 |
6 | 6 | ||
7 | struct array_link { |
7 | struct array_link { |
8 | dword link, text; |
8 | dword link, text; |
9 | int x,y,w,h; |
9 | int x,y,w,h; |
10 | int underline; |
10 | int underline; |
11 | }; |
11 | }; |
12 | 12 | ||
13 | struct LinksArray { |
13 | struct LinksArray { |
14 | array_link links[400]; |
14 | array_link links[400]; |
15 | char page_links[64000]; |
15 | char page_links[64000]; |
16 | dword buflen; |
16 | dword buflen; |
17 | int count, active; |
17 | int count, active; |
18 | void Hover(); |
18 | void Hover(); |
19 | void AddLink(); |
19 | void AddLink(); |
20 | void AddText(); |
20 | void AddText(); |
- | 21 | void ClickLink(); |
|
21 | dword GetURL(); |
22 | dword GetURL(); |
22 | void Clear(); |
23 | void Clear(); |
23 | void GetAbsoluteURL(); |
24 | void GetAbsoluteURL(); |
24 | int UrlAbsolute(); |
25 | int UrlAbsolute(); |
25 | } PageLinks; |
26 | } PageLinks; |
26 | 27 | ||
27 | void LinksArray::AddLink(dword lpath, int link_x, link_y) |
28 | void LinksArray::AddLink(dword lpath, int link_x, link_y) |
28 | { |
29 | { |
29 | links[count].x = link_x; |
30 | links[count].x = link_x; |
30 | links[count].y = link_y; |
31 | links[count].y = link_y; |
31 | 32 | ||
32 | links[count].link = buflen; |
33 | links[count].link = buflen; |
33 | strcpy(buflen, lpath); |
34 | strcpy(buflen, lpath); |
34 | buflen += strlen(lpath)+1; |
35 | buflen += strlen(lpath)+1; |
35 | count++; |
36 | count++; |
36 | } |
37 | } |
37 | 38 | ||
38 | void LinksArray::AddText(dword new_text, int link_w, link_h, link_underline) |
39 | void LinksArray::AddText(dword new_text, int link_w, link_h, link_underline) |
39 | { |
40 | { |
40 | if (count<1) return; |
41 | if (count<1) return; |
41 | links[count-1].w = link_w; |
42 | links[count-1].w = link_w; |
42 | links[count-1].h = link_h; |
43 | links[count-1].h = link_h; |
43 | links[count-1].underline = link_underline; |
44 | links[count-1].underline = link_underline; |
44 | 45 | ||
45 | links[count-1].text = buflen; |
46 | links[count-1].text = buflen; |
46 | strcpy(buflen, new_text); |
47 | strcpy(buflen, new_text); |
47 | buflen += strlen(new_text)+1; |
48 | buflen += strlen(new_text)+1; |
48 | } |
49 | } |
49 | 50 | ||
50 | dword LinksArray::GetURL(int id) |
51 | dword LinksArray::GetURL(int id) |
51 | { |
52 | { |
52 | return links[id].link; |
53 | return links[id].link; |
53 | } |
54 | } |
54 | 55 | ||
55 | void LinksArray::Clear() |
56 | void LinksArray::Clear() |
56 | { |
57 | { |
57 | int i; |
58 | int i; |
58 | for (i=0; i<=count; i++) DeleteButton(i+400); |
59 | for (i=0; i<=count; i++) DeleteButton(i+400); |
59 | buflen = #page_links; |
60 | buflen = #page_links; |
60 | count = 0; |
61 | count = 0; |
61 | active = -1; |
62 | active = -1; |
62 | CursorPointer.Restore(); |
63 | CursorPointer.Restore(); |
63 | } |
64 | } |
64 | 65 | ||
65 | char temp[sizeof(URL)]; |
66 | char temp[sizeof(URL)]; |
66 | PathShow_data status_text = {0, 17,250, 6, 250, 0, 0, 0x0, 0xFFFfff, 0, #temp, 0}; |
67 | PathShow_data status_text = {0, 17,250, 6, 250, 0, 0, 0x0, 0xFFFfff, 0, #temp, 0}; |
67 | 68 | ||
68 | void LinksArray::Hover(dword mx, my, link_col_in, link_col_a, bg_col) |
69 | void LinksArray::Hover(dword mx, my, link_col_in, link_col_a, bg_col) |
69 | { |
70 | { |
70 | int i; |
71 | int i; |
71 | signed int WBY = -WB1.list.first*WB1.list.line_h + WB1.list.line_h - WB1.DrawBuf.zoom; |
72 | signed int WBY = -WB1.list.first*WB1.list.line_h - WB1.DrawBuf.zoom; |
72 | for (i=0; i |
73 | for (i=0; i |
73 | { |
74 | { |
74 | if (mx>links[i].x) && (my>links[i].y) && (mx |
75 | if (mx>links[i].x) && (my>links[i].y) && (mx |
75 | { |
76 | { |
- | 77 | if (mouse.down) DrawRectangle(links[active].x, links[active].y, links[active].w, links[active].h, 0); |
|
- | 78 | if (mouse.up) ClickLink(); |
|
76 | if (active==i) return; |
79 | if (active==i) return; |
77 | CursorPointer.Set(); |
80 | CursorPointer.Set(); |
78 | if (links[active].underline) DrawBar(links[active].x, WBY + links[active].y,links[active].w, WB1.DrawBuf.zoom, link_col_in); |
81 | if (links[active].underline) DrawBar(links[active].x, WBY + links[active].y + links[active].h,links[active].w, WB1.DrawBuf.zoom, link_col_in); |
79 | if (links[i].underline) DrawBar(links[i].x, WBY + links[i].y,links[i].w, WB1.DrawBuf.zoom, bg_col); |
82 | if (links[i].underline) DrawBar(links[i].x, WBY + links[i].y + links[i].h,links[i].w, WB1.DrawBuf.zoom, bg_col); |
80 | active = i; |
83 | active = i; |
81 | status_text.start_x = wv_progress_bar.left + wv_progress_bar.width + 10; |
84 | status_text.start_x = wv_progress_bar.left + wv_progress_bar.width + 10; |
82 | status_text.start_y = Form.cheight - STATUSBAR_H + 3; |
85 | status_text.start_y = Form.cheight - STATUSBAR_H + 3; |
83 | status_text.area_size_x = Form.cwidth - status_text.start_x -3; |
86 | status_text.area_size_x = Form.cwidth - status_text.start_x -3; |
84 | DrawBar(status_text.start_x, status_text.start_y, status_text.area_size_x, 9, col_bg); |
87 | DrawBar(status_text.start_x, status_text.start_y, status_text.area_size_x, 9, col_bg); |
85 | status_text.text_pointer = links[active].link; |
88 | status_text.text_pointer = links[active].link; |
86 | PathShow_prepare stdcall(#status_text); |
89 | PathShow_prepare stdcall(#status_text); |
87 | PathShow_draw stdcall(#status_text); |
90 | PathShow_draw stdcall(#status_text); |
88 | return; |
91 | return; |
89 | } |
92 | } |
90 | } |
93 | } |
91 | if (active!=-1) |
94 | if (active!=-1) |
92 | { |
95 | { |
93 | CursorPointer.Restore(); |
96 | CursorPointer.Restore(); |
94 | if (links[active].underline) DrawBar(links[active].x, WBY + links[active].y,links[active].w, WB1.DrawBuf.zoom, link_col_in); |
97 | if (links[active].underline) DrawBar(links[active].x, WBY + links[active].y + links[active].h,links[active].w, WB1.DrawBuf.zoom, link_col_in); |
95 | DrawBar(status_text.start_x, status_text.start_y, status_text.area_size_x, 9, col_bg); |
98 | DrawBar(status_text.start_x, status_text.start_y, status_text.area_size_x, 9, col_bg); |
96 | active = -1; |
99 | active = -1; |
97 | } |
100 | } |
98 | } |
101 | } |
99 | 102 | ||
100 | int LinksArray::UrlAbsolute(dword in_URL) |
103 | int LinksArray::UrlAbsolute(dword in_URL) |
101 | { |
104 | { |
102 | if(!strncmp(in_URL,"http:",5)) return 1; |
105 | if(!strncmp(in_URL,"http:",5)) return 1; |
103 | if(!strncmp(in_URL,"https:",6)) return 1; |
106 | if(!strncmp(in_URL,"https:",6)) return 1; |
104 | if(!strncmp(in_URL,"mailto:",7)) return 1; |
107 | if(!strncmp(in_URL,"mailto:",7)) return 1; |
105 | if(!strncmp(in_URL,"ftp:",4)) return 1; |
108 | if(!strncmp(in_URL,"ftp:",4)) return 1; |
106 | if(!strncmp(in_URL,"WebView:",8)) return 1; |
109 | if(!strncmp(in_URL,"WebView:",8)) return 1; |
107 | if(!strncmp(in_URL,"/sys/",5)) return 1; |
110 | if(!strncmp(in_URL,"/sys/",5)) return 1; |
108 | if(!strncmp(in_URL,"/hd/",4)) return 1; |
111 | if(!strncmp(in_URL,"/hd/",4)) return 1; |
109 | if(!strncmp(in_URL,"/fd/",4)) return 1; |
112 | if(!strncmp(in_URL,"/fd/",4)) return 1; |
110 | if(!strncmp(in_URL,"/rd/",4)) return 1; |
113 | if(!strncmp(in_URL,"/rd/",4)) return 1; |
111 | if(!strncmp(in_URL,"/tmp/",5)) return 1; |
114 | if(!strncmp(in_URL,"/tmp/",5)) return 1; |
112 | if(!strncmp(in_URL,"/cd/",4)) return 1; |
115 | if(!strncmp(in_URL,"/cd/",4)) return 1; |
113 | if(!strncmp(in_URL,"/bd/",4)) return 1; |
116 | if(!strncmp(in_URL,"/bd/",4)) return 1; |
114 | if(!strncmp(in_URL,"/usbhd/",7)) return 1; |
117 | if(!strncmp(in_URL,"/usbhd/",7)) return 1; |
115 | if(!strncmp(in_URL,"/kolibrios/",11)) return 1; |
118 | if(!strncmp(in_URL,"/kolibrios/",11)) return 1; |
116 | return 0; |
119 | return 0; |
117 | } |
120 | } |
118 | 121 | ||
119 | void LinksArray::GetAbsoluteURL(dword in_URL) |
122 | void LinksArray::GetAbsoluteURL(dword in_URL) |
120 | { |
123 | { |
121 | int i; |
124 | int i; |
122 | dword orig_URL = in_URL; |
125 | dword orig_URL = in_URL; |
123 | char newurl[sizeof(URL)]; |
126 | char newurl[sizeof(URL)]; |
124 | 127 | ||
125 | if (UrlAbsolute(in_URL)) return; |
128 | if (UrlAbsolute(in_URL)) return; |
126 | 129 | ||
127 | IF (!strcmpn(in_URL,"./", 2)) in_URL+=2; |
130 | IF (!strcmpn(in_URL,"./", 2)) in_URL+=2; |
128 | if (!http_transfer) |
131 | if (!http_transfer) |
129 | { |
132 | { |
130 | strcpy(#newurl, BrowserHistory.CurrentUrl()); |
133 | strcpy(#newurl, BrowserHistory.CurrentUrl()); |
131 | } |
134 | } |
132 | else |
135 | else |
133 | { |
136 | { |
134 | strcpy(#newurl, #history_list[BrowserHistory.current-1].Item); |
137 | strcpy(#newurl, #history_list[BrowserHistory.current-1].Item); |
135 | } |
138 | } |
136 | 139 | ||
137 | if (ESBYTE[in_URL] == '/') //remove everything after site domain name |
140 | if (ESBYTE[in_URL] == '/') //remove everything after site domain name |
138 | { |
141 | { |
139 | i = strchr(#newurl+8, '/'); |
142 | i = strchr(#newurl+8, '/'); |
140 | if (i) ESBYTE[i]=0; |
143 | if (i) ESBYTE[i]=0; |
141 | in_URL+=1; |
144 | in_URL+=1; |
142 | } |
145 | } |
143 | 146 | ||
144 | _CUT_ST_LEVEL_MARK: |
147 | _CUT_ST_LEVEL_MARK: |
145 | 148 | ||
146 | if (newurl[strrchr(#newurl, '/')-2]<>'/') |
149 | if (newurl[strrchr(#newurl, '/')-2]<>'/') |
147 | { |
150 | { |
148 | newurl[strrchr(#newurl, '/')] = 0x00; |
151 | newurl[strrchr(#newurl, '/')] = 0x00; |
149 | } |
152 | } |
150 | 153 | ||
151 | IF (!strncmp(in_URL,"../",3)) |
154 | IF (!strncmp(in_URL,"../",3)) |
152 | { |
155 | { |
153 | in_URL+=3; |
156 | in_URL+=3; |
154 | newurl[strrchr(#newurl, '/')-1] = 0x00; |
157 | newurl[strrchr(#newurl, '/')-1] = 0x00; |
155 | goto _CUT_ST_LEVEL_MARK; |
158 | goto _CUT_ST_LEVEL_MARK; |
156 | } |
159 | } |
157 | 160 | ||
158 | if (newurl[strlen(#newurl)-1]<>'/') strcat(#newurl, "/"); |
161 | if (newurl[strlen(#newurl)-1]<>'/') strcat(#newurl, "/"); |
159 | 162 | ||
160 | strcat(#newurl, in_URL); |
163 | strcat(#newurl, in_URL); |
161 | strcpy(orig_URL, #newurl); |
164 | strcpy(orig_URL, #newurl); |
162 | }>> |
165 | } |
- | 166 | ||
- | 167 | void LinksArray::ClickLink() |
|
- | 168 | { |
|
- | 169 | if (http_transfer > 0) |
|
- | 170 | { |
|
- | 171 | StopLoading(); |
|
- | 172 | BrowserHistory.current--; |
|
- | 173 | } |
|
- | 174 | ||
- | 175 | strcpy(#URL, PageLinks.GetURL(PageLinks.active)); |
|
- | 176 | //#1 |
|
- | 177 | if (URL[0] == '#') |
|
- | 178 | { |
|
- | 179 | strcpy(#anchor, #URL+strrchr(#URL, '#')); |
|
- | 180 | strcpy(#URL, BrowserHistory.CurrentUrl()); |
|
- | 181 | WB1.list.first=WB1.list.count-WB1.list.visible; |
|
- | 182 | ShowPage(); |
|
- | 183 | return; |
|
- | 184 | } |
|
- | 185 | //liner.ru#1 |
|
- | 186 | if (strrchr(#URL, '#')!=-1) |
|
- | 187 | { |
|
- | 188 | strcpy(#anchor, #URL+strrchr(#URL, '#')); |
|
- | 189 | URL[strrchr(#URL, '#')-1] = 0x00; |
|
- | 190 | } |
|
- | 191 | ||
- | 192 | PageLinks.GetAbsoluteURL(#URL); |
|
- | 193 | ||
- | 194 | if (UrlExtIs(".png")==1) || (UrlExtIs(".gif")==1) || (UrlExtIs(".jpg")==1) || (UrlExtIs(".zip")==1) || (UrlExtIs(".kex")==1) |
|
- | 195 | || (UrlExtIs(".7z")==1) || (UrlExtIs("netcfg")==1) |
|
- | 196 | { |
|
- | 197 | //notify(#URL); |
|
- | 198 | if (!strncmp(#URL,"http://", 7)) |
|
- | 199 | { |
|
- | 200 | strcpy(#DL_URL, #URL); |
|
- | 201 | CreateThread(#Downloader,#downloader_stak+4092); |
|
- | 202 | } |
|
- | 203 | else RunProgram("@open", #URL); |
|
- | 204 | strcpy(#editURL, BrowserHistory.CurrentUrl()); |
|
- | 205 | strcpy(#URL, BrowserHistory.CurrentUrl()); |
|
- | 206 | return; |
|
- | 207 | } |
|
- | 208 | if (!strncmp(#URL,"mailto:", 7)) |
|
- | 209 | { |
|
- | 210 | notify(#URL); |
|
- | 211 | strcpy(#editURL, BrowserHistory.CurrentUrl()); |
|
- | 212 | strcpy(#URL, BrowserHistory.CurrentUrl()); |
|
- | 213 | return; |
|
- | 214 | } |
|
- | 215 | OpenPage(); |
|
- | 216 | return; |
|
163 | >=count;>1)> |
217 | }>> |
- | 218 | >=count;>1)> |