Rev 5773 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4497 | leency | 1 | CustomCursor CursorPointer; |
2 | dword CursorFile = FROM "../TWB/pointer.cur"; |
||
3 | |||
4550 | leency | 4 | #define NOLINE 0 |
5 | #define UNDERLINE 1 |
||
6 | |||
4491 | leency | 7 | struct array_link { |
8 | dword link, text; |
||
9 | int x,y,w,h; |
||
4550 | leency | 10 | int underline; |
4491 | leency | 11 | }; |
4488 | leency | 12 | |
5772 | leency | 13 | struct LinksArray { |
14 | array_link links[400]; |
||
4493 | leency | 15 | char page_links[64000]; |
4491 | leency | 16 | dword buflen; |
17 | int count, active; |
||
18 | void Hover(); |
||
19 | void AddLink(); |
||
20 | void AddText(); |
||
4488 | leency | 21 | dword GetURL(); |
22 | void Clear(); |
||
4686 | leency | 23 | void GetAbsoluteURL(); |
5718 | leency | 24 | int UrlAbsolute(); |
25 | } PageLinks; |
||
4488 | leency | 26 | |
5772 | leency | 27 | void LinksArray::AddLink(dword lpath, int link_x, link_y) |
4488 | leency | 28 | { |
4491 | leency | 29 | links[count].x = link_x; |
30 | links[count].y = link_y; |
||
31 | |||
32 | links[count].link = buflen; |
||
5772 | leency | 33 | strcpy(buflen, lpath); |
34 | buflen += strlen(lpath)+1; |
||
4491 | leency | 35 | count++; |
4488 | leency | 36 | } |
37 | |||
4550 | leency | 38 | void LinksArray::AddText(dword new_text, int link_w, link_h, link_underline) |
4491 | leency | 39 | { |
40 | if (count<1) return; |
||
41 | links[count-1].w = link_w; |
||
42 | links[count-1].h = link_h; |
||
4550 | leency | 43 | links[count-1].underline = link_underline; |
4491 | leency | 44 | |
45 | links[count-1].text = buflen; |
||
46 | strcpy(buflen, new_text); |
||
47 | buflen += strlen(new_text)+1; |
||
48 | } |
||
49 | |||
4488 | leency | 50 | dword LinksArray::GetURL(int id) |
51 | { |
||
4491 | leency | 52 | return links[id].link; |
53 | } |
||
54 | |||
55 | void LinksArray::Clear() |
||
56 | { |
||
4493 | leency | 57 | int i; |
58 | for (i=0; i<=count; i++) DeleteButton(i+400); |
||
4491 | leency | 59 | buflen = #page_links; |
60 | count = 0; |
||
61 | active = -1; |
||
4497 | leency | 62 | CursorPointer.Restore(); |
4491 | leency | 63 | } |
64 | |||
4686 | leency | 65 | char temp[sizeof(URL)]; |
4677 | leency | 66 | PathShow_data status_text = {0, 17,250, 6, 250, 0, 0, 0x0, 0xFFFfff, 0, #temp, 0}; |
4497 | leency | 67 | |
4492 | leency | 68 | void LinksArray::Hover(dword mx, my, link_col_in, link_col_a, bg_col) |
4491 | leency | 69 | { |
70 | int i; |
||
5773 | leency | 71 | signed int WBY = -WB1.list.first*WB1.list.line_h - WB1.DrawBuf.zoom; |
4491 | leency | 72 | for (i=0; i |
73 | { |
||
74 | if (mx>links[i].x) && (my>links[i].y) && (mx |
||
4488 | leency | 75 | { |
5773 | leency | 76 | if (mouse.down) DrawRectangle(links[active].x, links[active].y, links[active].w, links[active].h, 0); |
77 | if (mouse.up) ClickLink(); |
||
4497 | leency | 78 | if (active==i) return; |
79 | CursorPointer.Set(); |
||
5773 | leency | 80 | if (links[active].underline) DrawBar(links[active].x, WBY + links[active].y + links[active].h,links[active].w, WB1.DrawBuf.zoom, link_col_in); |
81 | if (links[i].underline) DrawBar(links[i].x, WBY + links[i].y + links[i].h,links[i].w, WB1.DrawBuf.zoom, bg_col); |
||
4491 | leency | 82 | active = i; |
5519 | leency | 83 | status_text.start_x = wv_progress_bar.left + wv_progress_bar.width + 10; |
84 | status_text.start_y = Form.cheight - STATUSBAR_H + 3; |
||
4718 | leency | 85 | status_text.area_size_x = Form.cwidth - status_text.start_x -3; |
86 | DrawBar(status_text.start_x, status_text.start_y, status_text.area_size_x, 9, col_bg); |
||
4677 | leency | 87 | status_text.text_pointer = links[active].link; |
88 | PathShow_prepare stdcall(#status_text); |
||
89 | PathShow_draw stdcall(#status_text); |
||
4491 | leency | 90 | return; |
4488 | leency | 91 | } |
92 | } |
||
4497 | leency | 93 | if (active!=-1) |
94 | { |
||
95 | CursorPointer.Restore(); |
||
5773 | leency | 96 | if (links[active].underline) DrawBar(links[active].x, WBY + links[active].y + links[active].h,links[active].w, WB1.DrawBuf.zoom, link_col_in); |
4718 | leency | 97 | DrawBar(status_text.start_x, status_text.start_y, status_text.area_size_x, 9, col_bg); |
4497 | leency | 98 | active = -1; |
99 | } |
||
4488 | leency | 100 | } |
101 | |||
5718 | leency | 102 | int LinksArray::UrlAbsolute(dword in_URL) |
103 | { |
||
104 | if(!strncmp(in_URL,"http:",5)) return 1; |
||
105 | if(!strncmp(in_URL,"https:",6)) return 1; |
||
106 | if(!strncmp(in_URL,"mailto:",7)) return 1; |
||
107 | if(!strncmp(in_URL,"ftp:",4)) return 1; |
||
108 | if(!strncmp(in_URL,"WebView:",8)) return 1; |
||
109 | if(!strncmp(in_URL,"/sys/",5)) return 1; |
||
110 | if(!strncmp(in_URL,"/hd/",4)) return 1; |
||
111 | if(!strncmp(in_URL,"/fd/",4)) return 1; |
||
112 | if(!strncmp(in_URL,"/rd/",4)) return 1; |
||
113 | if(!strncmp(in_URL,"/tmp/",5)) return 1; |
||
114 | if(!strncmp(in_URL,"/cd/",4)) return 1; |
||
115 | if(!strncmp(in_URL,"/bd/",4)) return 1; |
||
116 | if(!strncmp(in_URL,"/usbhd/",7)) return 1; |
||
117 | if(!strncmp(in_URL,"/kolibrios/",11)) return 1; |
||
118 | return 0; |
||
119 | } |
||
120 | |||
121 | void LinksArray::GetAbsoluteURL(dword in_URL) |
||
122 | { |
||
123 | int i; |
||
4686 | leency | 124 | dword orig_URL = in_URL; |
125 | char newurl[sizeof(URL)]; |
||
5718 | leency | 126 | |
127 | if (UrlAbsolute(in_URL)) return; |
||
4686 | leency | 128 | |
129 | IF (!strcmpn(in_URL,"./", 2)) in_URL+=2; |
||
5746 | leency | 130 | if (!http_transfer) |
131 | { |
||
132 | strcpy(#newurl, BrowserHistory.CurrentUrl()); |
||
133 | } |
||
134 | else |
||
135 | { |
||
136 | strcpy(#newurl, #history_list[BrowserHistory.current-1].Item); |
||
137 | } |
||
4491 | leency | 138 | |
5625 | leency | 139 | if (ESBYTE[in_URL] == '/') //remove everything after site domain name |
4686 | leency | 140 | { |
141 | i = strchr(#newurl+8, '/'); |
||
5625 | leency | 142 | if (i) ESBYTE[i]=0; |
4686 | leency | 143 | in_URL+=1; |
144 | } |
||
145 | |||
146 | _CUT_ST_LEVEL_MARK: |
||
147 | |||
148 | if (newurl[strrchr(#newurl, '/')-2]<>'/') |
||
149 | { |
||
150 | newurl[strrchr(#newurl, '/')] = 0x00; |
||
151 | } |
||
152 | |||
153 | IF (!strncmp(in_URL,"../",3)) |
||
154 | { |
||
155 | in_URL+=3; |
||
156 | newurl[strrchr(#newurl, '/')-1] = 0x00; |
||
157 | goto _CUT_ST_LEVEL_MARK; |
||
158 | } |
||
159 | |||
160 | if (newurl[strlen(#newurl)-1]<>'/') strcat(#newurl, "/"); |
||
161 | |||
162 | strcat(#newurl, in_URL); |
||
163 | strcpy(orig_URL, #newurl); |
||
164 | }>> |
||
165 |