Subversion Repositories Kolibri OS

Rev

Rev 5779 | Rev 5782 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
3067 leency 1
//HTML Viewer in C--
3987 leency 2
//Copyright 2007-2013 by Veliant & Leency
3107 leency 3
//Asper, lev, Lrz, Barsuk, Nable...
3067 leency 4
//home icon - rachel fu, GPL licence
5
 
4085 leency 6
#ifndef AUTOBUILD
7
	#include "lang.h--"
8
#endif
9
 
3107 leency 10
//libraries
3363 leency 11
#define MEMSIZE 0x100000
5499 leency 12
#include "..\lib\gui.h"
4508 leency 13
#include "..\lib\draw_buf.h"
14
#include "..\lib\list_box.h"
15
#include "..\lib\cursor.h"
3107 leency 16
//*.obj libraries
5499 leency 17
#include "..\lib\obj\box_lib.h"
18
#include "..\lib\obj\libio_lib.h"
19
#include "..\lib\obj\libimg_lib.h"
20
#include "..\lib\obj\http.h"
5690 leency 21
#include "..\lib\obj\iconv.h"
5408 leency 22
//useful patterns
23
#include "..\lib\patterns\libimg_load_skin.h"
24
 
5493 leency 25
char homepage[] = FROM "html\\homepage.htm";
4677 leency 26
 
4026 leency 27
#ifdef LANG_RUS
5781 leency 28
	char version[]=" Текстовый браузер 1.39";
4416 leency 29
	?define IMAGES_CACHE_CLEARED "Кэш картинок очищен"
4417 leency 30
	?define T_LAST_SLIDE "Это последний слайд"
4550 leency 31
	char loading[] = "Загрузка страницы...
";
4677 leency 32
	char page_not_found[] = FROM "html\page_not_found_ru.htm";
4649 leency 33
	char accept_language[]= "Accept-Language: ru\n";
4026 leency 34
#else
5781 leency 35
	char version[]=" Text-based Browser 1.39";
4026 leency 36
	?define IMAGES_CACHE_CLEARED "Images cache cleared"
4417 leency 37
	?define T_LAST_SLIDE "This slide is the last"
4550 leency 38
	char loading[] = "Loading...
";
4677 leency 39
	char page_not_found[] = FROM "html\page_not_found_en.htm";
4649 leency 40
	char accept_language[]= "Accept-Language: en\n";
4026 leency 41
#endif
42
 
5773 leency 43
#define URL_SERVICE_HISTORY "WebView://history"
44
#define URL_SERVICE_HOME "WebView://home"
45
#define URL_SERVICE_SOURCE "WebView://source:"
5631 pavelyakov 46
 
47
 
3067 leency 48
proc_info Form;
49
 
5772 leency 50
//char search_path[]="http://nigma.ru/index.php?s=";
4558 hidnplayr 51
int redirected = 0;
3067 leency 52
 
4074 leency 53
char stak[4096];
5640 pavelyakov 54
 
4026 leency 55
int action_buf;
56
 
4565 leency 57
dword http_transfer = 0;
4537 leency 58
dword http_buffer;
4534 leency 59
 
5772 leency 60
dword TOOLBAR_H = 33;
5519 leency 61
dword STATUSBAR_H = 15;
4718 leency 62
dword col_bg;
63
dword panel_color;
64
dword border_color;
4677 leency 65
 
5718 leency 66
progress_bar wv_progress_bar;
4718 leency 67
byte souce_mode = false;
4677 leency 68
 
5718 leency 69
enum {
70
	BACK_BUTTON=1000,
71
	FORWARD_BUTTON,
72
	REFRESH_BUTTON,
73
	GOTOURL_BUTTON,
74
	SANDWICH_BUTTON
75
};
76
 
77
enum {
5768 leency 78
	VIEW_SOURCE=1100,
5718 leency 79
	EDIT_SOURCE,
80
	VIEW_HISTORY,
81
	FREE_IMG_CACHE,
82
	DOWNLOAD_MANAGER
83
};
84
 
4411 leency 85
#include "..\TWB\TWB.c"
5768 leency 86
#include "menu.h"
4636 leency 87
#include "history.h"
4718 leency 88
#include "show_src.h"
5685 leency 89
#include "network_get.h"
5493 leency 90
#include "downloader.h"
3067 leency 91
 
4534 leency 92
char editURL[sizeof(URL)];
93
int	mouse_twb;
5772 leency 94
edit_box address_box = {250,56,34,0xffffff,0x94AECE,0xffffff,0xffffff,0,sizeof(URL),#editURL,#mouse_twb,2,19,19};
4534 leency 95
 
96
 
3067 leency 97
void main()
98
{
5711 leency 99
	dword btn;
3067 leency 100
	int half_scroll_size;
4026 leency 101
	int scroll_used=0, show_menu;
4536 leency 102
	CursorPointer.Load(#CursorFile);
5626 leency 103
	load_dll(boxlib, #box_lib_init,0);
104
	load_dll(libio, #libio_init,1);
105
	load_dll(libimg, #libimg_init,1);
106
	load_dll(libHTTP, #http_lib_init,1);
5690 leency 107
	load_dll(iconv_lib, #iconv_open,0);
5718 leency 108
	//load_dll(kmenu, #akmenu_init,0);
5408 leency 109
	Libimg_LoadImage(#skin, abspath("wv_skin.png"));
110
	SetSkinColors();
5772 leency 111
	CreateDir("/tmp0/1/downloads");
112
	if (param) strcpy(#URL, #param); else strcpy(#URL, URL_SERVICE_HOME);
5678 leency 113
	WB1.DrawBuf.zoom = 1;
5712 leency 114
	WB1.list.SetFont(8, 14, 10111000b);
5779 leency 115
	WB1.list.no_selection = true;
4536 leency 116
	SetEventMask(0xa7);
5631 pavelyakov 117
	BEGIN_LOOP_APPLICATION:
3067 leency 118
		WaitEventTimeout(2);
119
		switch(EAX & 0xFF)
120
		{
121
			CASE evMouse:
4081 leency 122
				if (!CheckActiveProcess(Form.ID)) break;
3466 leency 123
				edit_box_mouse stdcall (#address_box);
5640 pavelyakov 124
				mouse.get();
5772 leency 125
				if (WB1.list.MouseOver(mouse.x, mouse.y))
3067 leency 126
				{
5772 leency 127
					PageLinks.Hover(mouse.x, WB1.list.first*WB1.list.line_h + mouse.y, link_color_inactive, link_color_active, bg_color);
128
					if (bufsize) && (mouse.pkm) && (mouse.up) { CreateThread(#menu_rmb,#stak+4092); break; }
129
					if (WB1.list.MouseScroll(mouse.vert)) WB1.DrawPage();
3067 leency 130
				}
4636 leency 131
				//Drag scroller
4677 leency 132
				scroll_wv.all_redraw = 0;
5640 pavelyakov 133
				if (!mouse.lkm) scroll_used=0;
134
				if (mouse.x>=scroll_wv.start_x) && (mouse.x<=scroll_wv.start_x+scroll_wv.size_x)
135
				&& (mouse.y>=scroll_wv.start_y+scroll_wv.btn_height) && (-scroll_wv.btn_height+scroll_wv.start_y+scroll_wv.size_y>mouse.y)
5772 leency 136
				&& (WB1.list.count>WB1.list.visible) && (mouse.lkm) scroll_used=1;
3067 leency 137
				if (scroll_used)
138
				{
5678 leency 139
					mouse.y = mouse.y + 5;
4415 leency 140
					half_scroll_size = WB1.list.h - 16 * WB1.list.visible / WB1.list.count - 3 /2;
5640 pavelyakov 141
					if (half_scroll_size+WB1.list.y>mouse.y) || (mouse.y<0) || (mouse.y>4000) mouse.y=half_scroll_size+WB1.list.y;
4416 leency 142
					btn=WB1.list.first;
5640 pavelyakov 143
					WB1.list.first = mouse.y -half_scroll_size -WB1.list.y * WB1.list.count / WB1.list.h;
4415 leency 144
					if (WB1.list.visible+WB1.list.first>WB1.list.count) WB1.list.first=WB1.list.count-WB1.list.visible;
5766 leency 145
					if (btn!=WB1.list.first) WB1.DrawPage();
3067 leency 146
				}
147
				break;
5711 leency 148
 
3067 leency 149
			case evButton:
150
				btn=GetButtonID();
4636 leency 151
				if (btn==1)	ExitProcess();
152
				Scan(btn);
3067 leency 153
				break;
5711 leency 154
 
3067 leency 155
			case evKey:
5711 leency 156
				GetKeys();
5531 leency 157
				if (address_box.flags & 0b10)
5530 leency 158
				{
5711 leency 159
					if (key_ascii == ASCII_KEY_ENTER) Scan(key_scancode); else
160
					if (key_ascii != 0x0d) && (key_ascii != 183) && (key_ascii != 184) {EAX = key_ascii << 8; edit_box_key stdcall(#address_box);}
5530 leency 161
				}
5711 leency 162
				else
163
				{
164
					Scan(key_scancode);
165
				}
5530 leency 166
				break;
3067 leency 167
 
168
			case evReDraw:
4636 leency 169
				if (action_buf) Scan(action_buf);
5773 leency 170
				DefineAndDrawWindow(GetScreenWidth()-800/2,GetScreenHeight()-600/2,800,600,0x73,col_bg,0,0);
4725 leency 171
				GetProcessInfo(#Form, SelfInfo);
4727 leency 172
				if (Form.status_window>2) { DrawTitle(#header); break; }
4725 leency 173
				if (Form.height<120) MoveSize(OLD,OLD,OLD,120);
174
				if (Form.width<280) MoveSize(OLD,OLD,280,OLD);
3067</