Subversion Repositories Kolibri OS

Rev

Rev 7755 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1.  
  2. #define MEMSIZE 4096 * 200
  3.  
  4. //libraries
  5. #include "..\lib\gui.h"
  6. #include "..\lib\draw_buf.h"
  7. #include "..\lib\list_box.h"
  8. #include "..\lib\cursor.h"
  9. #include "..\lib\collection.h"
  10. #include "..\lib\random.h"
  11. #include "..\lib\clipboard.h"
  12.  
  13. // *.obj libraries
  14. #include "..\lib\obj\box_lib.h"
  15. #include "..\lib\obj\libio.h"
  16. #include "..\lib\obj\libimg.h"
  17. #include "..\lib\obj\http.h"
  18. #include "..\lib\obj\iconv.h"
  19.  
  20. #include "..\lib\patterns\history.h"
  21. #include "..\lib\patterns\http_downloader.h"
  22.  
  23. _http http = {0, 0, 0, 0, 0, 0, 0};
  24.  
  25. char homepage[] = FROM "html\\homepage.htm""\0";
  26. char page_not_found[] = FROM "html\\page_not_found_en.htm""\0";
  27.  
  28. char version[]="C-- Code View";
  29. char accept_language[]= "Accept-Language: en\n";
  30.  
  31. #define URL_SERVICE_HOME "CodeView://home"
  32.  
  33. proc_info Form;
  34.  
  35.  
  36. dword TOOLBAR_H = 40;
  37. dword STATUSBAR_H = 0;
  38.  
  39.  
  40. dword col_bg = 0xE3E2E2;
  41. dword panel_color  = 0xE3E2E2;
  42. dword border_color = 0x8C8C8C;
  43.  
  44. bool debug_mode = false;
  45.  
  46. bool open_in_a_new_window = false;
  47.  
  48. enum {
  49.         REFRESH_BUTTON,
  50.         EDIT_SOURCE,
  51. };
  52.  
  53. #define URL_SIZE 4000;
  54. #include "..\TWB\TWB.c"
  55. #include "show_src.h"
  56.  
  57. char URL[URL_SIZE+1];
  58. char editURL[URL_SIZE+1];
  59. int     mouse_twb;
  60. edit_box address_box = {250,60,30,0xffffff,0x94AECE,0xffffff,0xffffff,0x10000000,URL_SIZE-2,#editURL,#mouse_twb,2,19,19};
  61.  
  62. #define SKIN_Y 24
  63.  
  64. void main()
  65. {
  66.         int i;
  67.         int id;
  68.         load_dll(boxlib, #box_lib_init,0);
  69.         load_dll(libio, #libio_init,1);
  70.         load_dll(libimg, #libimg_init,1);
  71.         load_dll(iconv_lib, #iconv_open,0);
  72.         if (param) strcpy(#URL, #param); else strcpy(#URL, URL_SERVICE_HOME);
  73.         WB1.list.SetFont(8, 14, 10011000b);
  74.         WB1.list.no_selection = true;
  75.         SetEventMask(EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE + EVM_MOUSE_FILTER);
  76.         loop() switch(WaitEvent())
  77.         {
  78.                 case evMouse:
  79.                         edit_box_mouse stdcall (#address_box);
  80.                         mouse.get();
  81.                         if (WB1.list.MouseScroll(mouse.vert)) WB1.DrawPage();
  82.                         scrollbar_v_mouse (#scroll_wv);
  83.                         if (WB1.list.first != scroll_wv.position)
  84.                         {
  85.                                 WB1.list.first = scroll_wv.position;
  86.                                 WB1.DrawPage();
  87.                                 break;
  88.                         }
  89.                         break;
  90.  
  91.                 case evButton:
  92.                         id=GetButtonID();
  93.                         if (1==id) ExitProcess();
  94.                         break;
  95.  
  96.                 case evKey:
  97.                         GetKeys();
  98.  
  99.                         if (SCAN_CODE_F5 == key_scancode) {
  100.                                 OpenPage();
  101.                         }
  102.                         if (SCAN_CODE_F3 == key_scancode) {
  103.                                 RunProgram("/rd/1/tinypad", #URL);
  104.                         }
  105.  
  106.                         if (address_box.flags & 0b10)  
  107.                         {
  108.                                 if (key_ascii == ASCII_KEY_ENTER) EventGoToPage();
  109.                                 else {
  110.                                         EAX = key_editbox;
  111.                                         edit_box_key stdcall(#address_box);
  112.                                 }
  113.                         }
  114.                         else
  115.                         {
  116.                                 #define KEY_SCROLL_N 11
  117.                                 if (SCAN_CODE_UP   == key_scancode) for (i=0;i<KEY_SCROLL_N;i++) WB1.list.KeyUp();
  118.                                 if (SCAN_CODE_DOWN == key_scancode) for (i=0;i<KEY_SCROLL_N;i++) WB1.list.KeyDown();
  119.                                 if (WB1.list.ProcessKey(key_scancode)) WB1.DrawPage();
  120.                         }
  121.                         break;
  122.  
  123.                 case evReDraw:
  124.                         DefineAndDrawWindow(GetScreenWidth()-800/2-random(80),GetScreenHeight()-600/2-random(80),800,600,0x73,col_bg,0,0);
  125.                         GetProcessInfo(#Form, SelfInfo);
  126.                         if (Form.status_window>2) { DrawTitle(#header); break; }
  127.                         if (Form.height<120) { MoveSize(OLD,OLD,OLD,120); break; }
  128.                         if (Form.width<280) { MoveSize(OLD,OLD,280,OLD); break; }
  129.                         Draw_Window();
  130.                         break;
  131.         }
  132. }
  133.  
  134. void SetElementSizes()
  135. {
  136.         address_box.top = TOOLBAR_H/2-10;
  137.         basic_line_h = calc(WB1.list.font_h * 130) / 100;
  138.         address_box.left = address_box.top;
  139.         address_box.width = Form.cwidth - address_box.left - address_box.left -14;
  140.         WB1.list.SetSizes(0, TOOLBAR_H, Form.width - 10 - scroll_wv.size_x,
  141.                 Form.cheight - TOOLBAR_H - STATUSBAR_H, basic_line_h);
  142.         WB1.list.wheel_size = 7 * basic_line_h;
  143.         WB1.list.column_max = WB1.list.w - scroll_wv.size_x / WB1.list.font_w;
  144.         WB1.list.visible = WB1.list.h;
  145.         if (WB1.list.w!=WB1.DrawBuf.bufw) {
  146.                 WB1.DrawBuf.Init(WB1.list.x, WB1.list.y, WB1.list.w, 32700);
  147.                 OpenPage();
  148.         }
  149. }
  150.  
  151. void Draw_Window()
  152. {
  153.         DrawBar(0,0, Form.cwidth,TOOLBAR_H-2, panel_color);
  154.         DrawBar(0,TOOLBAR_H-2, Form.cwidth,1, 0xD7D0D3);
  155.         DrawBar(0,TOOLBAR_H-1, Form.cwidth,1, border_color);
  156.         SetElementSizes();
  157.         DrawRectangle(address_box.left-3, address_box.top-3, address_box.width+4, 25,border_color);
  158.         DrawBar(0,Form.cheight - STATUSBAR_H, Form.cwidth,STATUSBAR_H, col_bg);
  159.         DrawBar(0,Form.cheight - STATUSBAR_H, Form.cwidth,1, border_color);
  160.         DrawEditBoxWebView();
  161.         if (!header)
  162.                 OpenPage();
  163.         else {
  164.                 WB1.DrawPage();
  165.                 DrawEditBoxWebView();
  166.         }
  167.         DrawRectangle(scroll_wv.start_x, scroll_wv.start_y, scroll_wv.size_x, scroll_wv.size_y-1, scroll_wv.bckg_col);
  168. }
  169.  
  170. void EventGoToPage()
  171. {
  172.         if (!editURL[0]) {
  173.                 strcpy(#URL, URL_SERVICE_HOME);
  174.         }
  175.         else
  176.         {
  177.                 strcpy(#URL, #editURL);
  178.         }
  179.         OpenPage();
  180. }
  181.  
  182.  
  183. void SetPageDefaults()
  184. {
  185.         strncpy(#header, #version, sizeof(header)-1);
  186.         WB1.list.count = WB1.list.first = 0;
  187.         cur_encoding = CH_NULL;
  188. }
  189.  
  190. void OpenPage()
  191. {
  192.         char getUrl[URL_SIZE+1];
  193.         strcpy(#editURL, #URL);
  194.         history.add(#URL);
  195.         if (!strncmp(#URL,"CodeView:",8))
  196.         {
  197.                 SetPageDefaults();
  198.                 if (!strcmp(#URL, URL_SERVICE_HOME)) LoadInternalPage(#homepage, sizeof(homepage));
  199.                 DrawEditBoxWebView();
  200.                 return;
  201.         }
  202.         else
  203.         {
  204.                 file_size stdcall (#URL);
  205.                 bufsize = EBX;
  206.                 if (bufsize)
  207.                 {
  208.                         free(bufpointer);
  209.                         bufpointer = malloc(bufsize);
  210.                         SetPageDefaults();
  211.                         ReadFile(0, bufsize, bufpointer, #URL);
  212.                         ShowCodeSource();
  213.                         LoadInternalPage(bufpointer, bufsize); 
  214.                 }
  215.                 ShowPage();
  216.         }
  217. }
  218.  
  219. DrawEditBoxWebView()
  220. {
  221.         int skin_x_offset;
  222.         DrawBar(address_box.left-2, address_box.top-2, address_box.width+3, 2, address_box.color);
  223.         DrawBar(address_box.left-2, address_box.top, 2, 22, address_box.color);
  224.         address_box.size = address_box.pos = address_box.shift = address_box.shift_old = strlen(#editURL);
  225.         address_box.offset = 0;
  226.         edit_box_draw stdcall(#address_box);
  227.         skin_x_offset = 51;
  228.         img_draw stdcall(skin.image, address_box.left+address_box.width+1, address_box.top-3, 17, skin.h, skin_x_offset, SKIN_Y);
  229. }
  230.  
  231. void LoadInternalPage(dword bufpos, in_filesize){
  232.         bufsize = in_filesize;
  233.         bufpointer = bufpos;
  234.         ShowPage();
  235. }
  236.  
  237. void ShowPage()
  238. {
  239.         DrawEditBoxWebView();
  240.         if (!bufsize) LoadInternalPage(#page_not_found, sizeof(page_not_found));
  241.         WB1.ParseHtml();
  242.         WB1.DrawPage();
  243. }
  244.  
  245. void DrawStatusBar() {return;};
  246. void EventClickLink() {return;};
  247. void EventShowLinkMenu() {return;};
  248.  
  249. char anchor[256];
  250.  
  251. stop: