Subversion Repositories Kolibri OS

Rev

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