Rev 7775 | Rev 7799 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 7775 | Rev 7778 | ||
---|---|---|---|
1 | //===================================================// |
1 | //===================================================// |
2 | // // |
2 | // // |
3 | // MODULE // |
3 | // MODULE // |
4 | // // |
4 | // // |
5 | //===================================================// |
5 | //===================================================// |
6 | 6 | ||
7 | #define TABS_MAX 5 |
7 | #define TABS_MAX 5 |
8 | 8 | ||
9 | TWebBrowser data[TABS_MAX+1]; |
9 | TWebBrowser data[TABS_MAX+1]; |
10 | _history tabstory[TABS_MAX+1]; |
10 | _history tabstory[TABS_MAX+1]; |
11 | 11 | ||
12 | struct TAB |
12 | struct TAB |
13 | { |
13 | { |
14 | int count; |
14 | int count; |
15 | signed int active; |
15 | signed int active; |
16 | bool add(); |
16 | bool add(); |
17 | bool close(); |
17 | bool close(); |
18 | void save_state(); |
18 | void save_state(); |
19 | void restore(); |
19 | void restore(); |
20 | } tab = {1,0}; |
20 | } tab = {1,0}; |
21 | 21 | ||
22 | 22 | ||
23 | bool TAB::add() |
23 | bool TAB::add() |
24 | { |
24 | { |
25 | if (count==TABS_MAX) return false; |
25 | if (count==TABS_MAX) return false; |
26 | save_state(); |
26 | save_state(); |
27 | count++; |
27 | count++; |
28 | active = count-1; |
28 | active = count-1; |
29 | history = tabstory[active]; |
29 | history = tabstory[active]; |
30 | return true; |
30 | return true; |
31 | } |
31 | } |
32 | 32 | ||
33 | bool TAB::close(int _tab_number) |
33 | bool TAB::close(int _tab_number) |
34 | { |
34 | { |
35 | int i; |
35 | int i; |
36 | if (count==1) return false; |
36 | if (count==1) return false; |
37 | for (i=_tab_number; i<=TABS_MAX; i++) { |
37 | for (i=_tab_number; i<=TABS_MAX; i++) { |
38 | data[i] = data[i+1]; |
38 | data[i] = data[i+1]; |
39 | tabstory[i] = tabstory[i+1]; |
39 | tabstory[i] = tabstory[i+1]; |
40 | } |
40 | } |
41 | if (_tab_number |
41 | if (_tab_number |
42 | if (active==count-1) && (active>0) active--; |
42 | if (active==count-1) && (active>0) active--; |
43 | count--; |
43 | count--; |
44 | return true; |
44 | return true; |
45 | } |
45 | } |
46 | 46 | ||
47 | void TAB::save_state() |
47 | void TAB::save_state() |
48 | { |
48 | { |
49 | tabstory[active] = history; |
49 | tabstory[active] = history; |
50 | data[active] = WB1; |
50 | data[active] = WB1; |
51 | } |
51 | } |
52 | 52 | ||
53 | void TAB::restore(int _id) |
53 | void TAB::restore(int _id) |
54 | { |
54 | { |
55 | tab.active = _id; |
55 | tab.active = _id; |
56 | WB1 = data[_id]; |
56 | WB1 = data[_id]; |
57 | history = tabstory[_id]; |
57 | history = tabstory[_id]; |
58 | } |
58 | } |
59 | 59 | ||
60 | //===================================================// |
60 | //===================================================// |
61 | // // |
61 | // // |
62 | // WebView Actions // |
62 | // WebView Actions // |
63 | // // |
63 | // // |
64 | //===================================================// |
64 | //===================================================// |
65 | 65 | ||
66 | #define DEFAULT_TABW 220 |
66 | #define DEFAULT_TABW 220 |
67 | int tab_w = DEFAULT_TABW; |
67 | int tab_w = DEFAULT_TABW; |
68 | 68 | ||
69 | int GetTabWidth() |
69 | int GetTabWidth() |
70 | { |
70 | { |
71 | if (tab.count == TABS_MAX) return Form.cwidth / tab.count; |
71 | if (tab.count == TABS_MAX) return Form.cwidth / tab.count; |
72 | if (tab.count * DEFAULT_TABW + TAB_H < Form.cwidth) return DEFAULT_TABW; else |
72 | if (tab.count * DEFAULT_TABW + TAB_H < Form.cwidth) return DEFAULT_TABW; else |
73 | return Form.cwidth - TAB_H - 2 / tab.count; |
73 | return Form.cwidth - TAB_H - 2 / tab.count; |
74 | } |
74 | } |
75 | 75 | ||
76 | void DrawTab(int _id) |
76 | void DrawTab(int _id) |
77 | { |
77 | { |
78 | #define CLOSE_S 13 |
78 | #define CLOSE_S 13 |
79 | dword bgcol, border_bottom_color; |
79 | dword bgcol, border_bottom_color; |
80 | char header_no_version[sizeof(TWebBrowser.header)]; |
80 | char header_no_version[sizeof(TWebBrowser.header)]; |
81 | char name[DEFAULT_TABW/6]; |
81 | char name[DEFAULT_TABW/6]; |
82 | int xxx = _id * tab_w; |
82 | int xxx = _id * tab_w; |
83 | 83 | ||
84 | if (_id==tab.active) { |
84 | if (_id==tab.active) { |
85 | tab.save_state(); |
85 | tab.save_state(); |
86 | bgcol = system.color.work_light; |
86 | bgcol = system.color.work_light; |
87 | border_bottom_color = system.color.work_light; |
87 | border_bottom_color = system.color.work_light; |
88 | } else { |
88 | } else { |
89 | bgcol=system.color.work; |
89 | bgcol=system.color.work; |
90 | border_bottom_color = system.color.work_graph; |
90 | border_bottom_color = system.color.work_graph; |
91 | } |
91 | } |
92 | if (data[_id].header) { |
92 | if (data[_id].header) { |
93 | strncpy(#header_no_version, #data[_id].header, strlen(#data[_id].header)-sizeof(version)-2); |
93 | strncpy(#header_no_version, #data[_id].header, strlen(#data[_id].header)-sizeof(version)-2); |
94 | strncpy(#name, #header_no_version, tab_w-CLOSE_S/6-2); |
94 | strncpy(#name, #header_no_version, tab_w-CLOSE_S/6-2); |
95 | } |
95 | } |
96 | DrawBar(xxx, TOOLBAR_H, 1, TAB_H, system.color.work_dark); |
96 | DrawBar(xxx, TOOLBAR_H, 1, TAB_H, system.color.work_dark); |
97 | DrawBar(xxx+1, TOOLBAR_H, tab_w-1, TAB_H-1, bgcol); |
97 | DrawBar(xxx+1, TOOLBAR_H, tab_w-1, TAB_H-1, bgcol); |
98 | DrawBar(xxx+1, TOOLBAR_H+TAB_H-1, tab_w-1, 1, border_bottom_color); |
98 | DrawBar(xxx+1, TOOLBAR_H+TAB_H-1, tab_w-1, 1, border_bottom_color); |
99 | DefineHiddenButton(xxx, TOOLBAR_H-1, tab_w, TAB_H, TAB_ID+_id); |
99 | DefineHiddenButton(xxx, TOOLBAR_H-1, tab_w, TAB_H, TAB_ID+_id); |
100 | WriteTextCenter(xxx, TOOLBAR_H+6, tab_w-CLOSE_S, system.color.work_text, #name); |
100 | WriteTextCenter(xxx, TOOLBAR_H+6, tab_w-CLOSE_S, system.color.work_text, #name); |
101 | 101 | ||
102 | DefineHiddenButton(xxx+tab_w-CLOSE_S-3, TOOLBAR_H+3, CLOSE_S-1, CLOSE_S-1, TAB_CLOSE_ID+_id); |
102 | DefineHiddenButton(xxx+tab_w-CLOSE_S-3, TOOLBAR_H+3, CLOSE_S-1, CLOSE_S-1, TAB_CLOSE_ID+_id); |
103 | DrawBar(xxx+tab_w-CLOSE_S-3, TOOLBAR_H+3, CLOSE_S, CLOSE_S, system.color.work_dark); |
103 | DrawBar(xxx+tab_w-CLOSE_S-3, TOOLBAR_H+3, CLOSE_S, CLOSE_S, system.color.work_dark); |
104 | WriteText(xxx+tab_w-CLOSE_S+1, TOOLBAR_H+5, 0x80, system.color.work_light, "x"); |
104 | WriteText(xxx+tab_w-CLOSE_S+1, TOOLBAR_H+5, 0x80, system.color.work_light, "x"); |
105 | } |
105 | } |
106 | 106 | ||
107 | void DrawActiveTab() |
107 | void DrawActiveTab() |
108 | { |
108 | { |
109 | if (tab_w == GetTabWidth()) DrawTab(tab.active); |
109 | if (tab_w == GetTabWidth()) DrawTab(tab.active); |
110 | else DrawTabsBar(); |
110 | else DrawTabsBar(); |
111 | } |
111 | } |
112 | 112 | ||
113 | void DrawNewTabButton() |
113 | int DrawNewTabButton() |
114 | { |
114 | { |
115 | dword btn_light = MixColors(system.color.work_button, 0xFFFfff, 220); |
115 | dword btn_light = MixColors(system.color.work_button, 0xFFFfff, 220); |
116 | dword btn_dark = MixColors(system.color.work_button, 0, 180); |
116 | dword btn_dark = MixColors(system.color.work_button, 0, 180); |
117 | int xxx = tab.count * tab_w; |
117 | int xxx = tab.count * tab_w; |
118 | 118 | ||
119 | if (tab.count < TABS_MAX) { |
119 | if (tab.count < TABS_MAX) { |
120 | DrawBar(xxx, TOOLBAR_H, 1, TAB_H, system.color.work_graph); |
120 | DrawBar(xxx, TOOLBAR_H, 1, TAB_H, system.color.work_graph); |
121 | DrawBar(xxx+1, TOOLBAR_H, TAB_H, TAB_H-1, system.color.work_button); |
121 | DrawBar(xxx+1, TOOLBAR_H, TAB_H, TAB_H-1, system.color.work_button); |
122 | DrawRectangle3D(xxx+1, TOOLBAR_H, TAB_H, TAB_H-1, btn_light, btn_dark); |
122 | DrawRectangle3D(xxx+1, TOOLBAR_H, TAB_H, TAB_H-1, btn_light, btn_dark); |
123 | PutPixel(xxx+1+TAB_H, TOOLBAR_H, btn_dark); |
123 | PutPixel(xxx+1+TAB_H, TOOLBAR_H, btn_dark); |
124 | DefineHiddenButton(xxx+1, TOOLBAR_H, TAB_H-1, TAB_H-1, NEW_TAB); |
124 | DefineHiddenButton(xxx+1, TOOLBAR_H, TAB_H-1, TAB_H-1, NEW_TAB); |
125 | WriteText(xxx+7, TOOLBAR_H+2, 0x90, system.color.work_button_text, "+"); |
125 | WriteText(xxx+7, TOOLBAR_H+2, 0x90, system.color.work_button_text, "+"); |
126 | } |
126 | return xxx + TAB_H + 2; |
- | 127 | } else { |
|
- | 128 | return xxx; |
|
- | 129 | } |
|
127 | } |
130 | } |
128 | 131 | ||
129 | void DrawTabsBar() |
132 | void DrawTabsBar() |
130 | { |
133 | { |
131 | dword i; |
134 | dword i; |
132 | tab_w = GetTabWidth(); |
135 | tab_w = GetTabWidth(); |
133 | for (i=0; i |
136 | for (i=0; i |
134 | DrawNewTabButton(); |
137 | i = DrawNewTabButton(); |
135 | i = tab_w * i + TAB_H + 2; |
138 | DrawBar(i, TOOLBAR_H, Form.cwidth-i, TAB_H-1, MixColors(system.color.work_dark, system.color.work, 128)); |
136 | DrawBar(i, TOOLBAR_H, Form.cwidth-i, TAB_H-1, MixColors(system.color.work_dark, system.color.work, 128)); |
- | |
137 | DrawBar(i, TOOLBAR_H+TAB_H-1, Form.cwidth-i, 1, system.color.work_graph); |
139 | DrawBar(i, TOOLBAR_H+TAB_H-1, Form.cwidth-i, 1, system.color.work_graph); |
138 | } |
140 | } |
139 | 141 | ||
140 | void EventTabClose(int _id) |
142 | void EventTabClose(int _id) |
141 | { |
143 | { |
142 | DeleteButton(tab.count); |
144 | DeleteButton(tab.count); |
143 | if (_id == tab.active) { |
145 | if (_id == tab.active) { |
144 | tab.close(_id); |
146 | tab.close(_id); |
145 | tab.restore(tab.active); |
147 | tab.restore(tab.active); |
146 | WB1.ParseHtml(WB1.bufpointer, WB1.bufsize); |
148 | WB1.ParseHtml(WB1.bufpointer, WB1.bufsize); |
147 | WB1.DrawPage(); |
149 | WB1.DrawPage(); |
148 | SetOmniboxText(history.current()); |
150 | SetOmniboxText(history.current()); |
149 | } else { |
151 | } else { |
150 | tab.close(_id); |
152 | tab.close(_id); |
151 | } |
153 | } |
152 | DrawTabsBar(); |
154 | DrawTabsBar(); |
153 | } |
155 | } |
154 | 156 | ||
155 | void EventCloseActiveTab() |
157 | void EventCloseActiveTab() |
156 | { |
158 | { |
157 | EventTabClose(tab.active); |
159 | EventTabClose(tab.active); |
158 | } |
160 | } |
159 | 161 | ||
160 | void EventTabClick(int _id) |
162 | void EventTabClick(int _id) |
161 | { |
163 | { |
162 | if (_id>=tab.count) _id = 0; |
164 | if (_id>=tab.count) _id = 0; |
163 | if (_id==-1) _id = tab.count-1; |
165 | if (_id==-1) _id = tab.count-1; |
164 | tab.save_state(); |
166 | tab.save_state(); |
165 | tab.restore(_id); |
167 | tab.restore(_id); |
166 | SetElementSizes(); |
168 | SetElementSizes(); |
167 | if (!BrowserWidthChanged()) { |
169 | if (!BrowserWidthChanged()) { |
168 | DrawTabsBar(); |
170 | DrawTabsBar(); |
169 | WB1.ParseHtml(WB1.bufpointer, WB1.bufsize); |
171 | WB1.ParseHtml(WB1.bufpointer, WB1.bufsize); |
170 | WB1.DrawPage(); |
172 | WB1.DrawPage(); |
171 | } |
173 | } |
172 | SetOmniboxText(history.current()); |
174 | SetOmniboxText(history.current()); |
173 | } |
175 | } |
174 | 176 | ||
175 | void EventOpenNewTab(dword _url) |
177 | void EventOpenNewTab(dword _url) |
176 | { |
178 | { |
177 | tab.add(); |
179 | tab.add(); |
178 | OpenPage(_url); |
180 | OpenPage(_url); |
179 | DrawTabsBar(); |
181 | DrawTabsBar(); |
180 | } |
182 | } |
181 | 183 | ||
182 | void EventActivateNextTab() |
184 | void EventActivateNextTab() |
183 | { |
185 | { |
184 | EventTabClick(tab.active+1); |
186 | EventTabClick(tab.active+1); |
185 | } |
187 | } |
186 | 188 | ||
187 | void EventActivatePreviousTab() |
189 | void EventActivatePreviousTab() |
188 | { |
190 | { |
189 | EventTabClick(tab.active-1); |
191 | EventTabClick(tab.active-1); |
190 | } |
192 | } |
191 | 193 | ||
192 | 194 | ||
193 | :void DebugTabs() |
195 | :void DebugTabs() |
194 | { |
196 | { |
195 | debugln("\n\n\nHISTORY=========================="); |
197 | debugln("\n\n\nHISTORY=========================="); |
196 | history.add("history"); |
198 | history.add("history"); |
197 | history.debug(); |
199 | history.debug(); |
198 | 200 | ||
199 | debugln("\n\n\nTABSTORY[0]======================"); |
201 | debugln("\n\n\nTABSTORY[0]======================"); |
200 | tabstory[0].add("tabstory0"); |
202 | tabstory[0].add("tabstory0"); |
201 | tabstory[0].debug(); |
203 | tabstory[0].debug(); |
202 | 204 | ||
203 | debugln("\n\n\nTABSTORY[1]======================"); |
205 | debugln("\n\n\nTABSTORY[1]======================"); |
204 | tabstory[1].add("tabstory1"); |
206 | tabstory[1].add("tabstory1"); |
205 | tabstory[1].debug(); |
207 | tabstory[1].debug(); |
206 | 208 | ||
207 | debugln("\n\n\n\n"); |
209 | debugln("\n\n\n\n"); |
208 | debugval("history.items.data_start", history.items.data_start); |
210 | debugval("history.items.data_start", history.items.data_start); |
209 | debugval("tabstory[0].items.data_start", tabstory[0].items.data_start); |
211 | debugval("tabstory[0].items.data_start", tabstory[0].items.data_start); |
210 | debugval("tabstory[1].items.data_start", tabstory[1].items.data_start); |
212 | debugval("tabstory[1].items.data_start", tabstory[1].items.data_start); |
211 | debugln("\n\n\n\n"); |
213 | debugln("\n\n\n\n"); |
212 | }>>=TABS_MAX;> |
214 | }>>=TABS_MAX;> |