New Downloader: v0.5

git-svn-id: svn://kolibrios.org@4666 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Kirill Lipatov (Leency) 2014-03-21 00:21:09 +00:00
parent 54b03fbe7b
commit 99f3b47240
6 changed files with 53 additions and 37 deletions

View File

@ -679,7 +679,7 @@ void TWebBrowser::NewLine(int left1, top1)
{ {
if (text_align == ALIGN_CENTER) DrawBuf.AlignCenter(left1,top1,list.w,list.line_h,stolbec * 6); if (text_align == ALIGN_CENTER) DrawBuf.AlignCenter(left1,top1,list.w,list.line_h,stolbec * 6);
if (text_align == ALIGN_RIGHT) DrawBuf.AlignRight(left1,top1,list.w,list.line_h,stolbec * 6); if (text_align == ALIGN_RIGHT) DrawBuf.AlignRight(left1,top1,list.w,list.line_h,stolbec * 6);
PutPaletteImage(buf_data+8, list.w, list.line_h, left1-5, top1, 32,0); DrawBuf.Show();
DrawBuf.Fill(bg_color); DrawBuf.Fill(bg_color);
} }
stroka++; stroka++;

View File

@ -227,7 +227,7 @@ void SetElementSizes()
WB1.list.SetSizes(0, 44, Form.width - 10 - scroll_wv.size_x, Form.cheight - 44, 0, 10); WB1.list.SetSizes(0, 44, Form.width - 10 - scroll_wv.size_x, Form.cheight - 44, 0, 10);
WB1.list.column_max = WB1.list.w - scroll_wv.size_x / 6; WB1.list.column_max = WB1.list.w - scroll_wv.size_x / 6;
WB1.list.visible = WB1.list.h - 3 / WB1.list.line_h - 2; WB1.list.visible = WB1.list.h - 3 / WB1.list.line_h - 2;
WB1.DrawBuf.Init(WB1.list.x, WB1.list.y, WB1.list.w, WB1.list.h, WB1.list.line_h); WB1.DrawBuf.Init(WB1.list.x, WB1.list.line_h, WB1.list.w, WB1.list.h);
} }

View File

@ -3,6 +3,8 @@
#include "..\lib\kolibri.h" #include "..\lib\kolibri.h"
#include "..\lib\strings.h" #include "..\lib\strings.h"
#include "..\lib\figures.h" #include "..\lib\figures.h"
#include "..\lib\encoding.h"
#include "..\lib\draw_buf.h"
#include "..\lib\file_system.h" #include "..\lib\file_system.h"
#include "..\lib\mem.h" #include "..\lib\mem.h"
#include "..\lib\dll.h" #include "..\lib\dll.h"
@ -12,7 +14,7 @@
#include "..\lib\lib.obj\libio_lib.h" #include "..\lib\lib.obj\libio_lib.h"
#include "..\lib\lib.obj\http.h" #include "..\lib\lib.obj\http.h"
char header[]="New Downloader v0.4"; char header[]="New Downloader v0.5";
#ifdef LANG_RUS #ifdef LANG_RUS
char accept_language[]= "Accept-Language: ru\n"; char accept_language[]= "Accept-Language: ru\n";
@ -22,7 +24,7 @@ char header[]="New Downloader v0.4";
proc_info Form; proc_info Form;
#define WIN_W 400 #define WIN_W 400
#define WIN_H 240 #define WIN_H 220
system_colors sc; system_colors sc;
#define URL param #define URL param
@ -37,9 +39,7 @@ dword bufsize;
dword http_transfer = 0; dword http_transfer = 0;
dword http_buffer; dword http_buffer;
struct diagram { DrawBufer diagram;
int x,y,w,h;
} diagram;
void main() void main()
{ {
@ -55,7 +55,7 @@ void main()
if (!URL) strcpy(#URL, "http://builds.kolibrios.org/eng/latest-iso.7z"); if (!URL) strcpy(#URL, "http://builds.kolibrios.org/eng/latest-iso.7z");
address_box.size = address_box.pos = strlen(#URL); address_box.size = address_box.pos = strlen(#URL);
SetEventMask(0xa7); SetEventMask(0x27); //a7
loop() loop()
{ {
WaitEventTimeout(40); WaitEventTimeout(40);
@ -89,10 +89,7 @@ void main()
if (Form.status_window>2) return; if (Form.status_window>2) return;
if (Form.height<120) MoveSize(OLD,OLD,OLD,120); if (Form.height<120) MoveSize(OLD,OLD,OLD,120);
if (Form.width<280) MoveSize(OLD,OLD,280,OLD); if (Form.width<280) MoveSize(OLD,OLD,280,OLD);
diagram.x = 20; diagram.Init(20, 87, Form.cwidth - 40, Form.cheight - 87 - 28);
diagram.y = 87;
diagram.w = Form.cwidth - diagram.x - diagram.x;
diagram.h = Form.cheight - diagram.y - 28;
Draw_Window(); Draw_Window();
break; break;
@ -132,23 +129,22 @@ void main()
void DrawSpeed() void DrawSpeed()
{ {
int i; int i;
int speed_in_position; int speed_in_position, speed_string;
int max_speed, start_from; int max_speed, start_from;
char bytes_received[70]; char bytes_received[70];
DrawBar(diagram.x, diagram.y, diagram.w, diagram.h+1, 0xFCF8F7); diagram.Fill(0xFCF8F7);
max_speed = speed[speed_position]; max_speed = speed[speed_position];
if (speed_position < diagram.w) start_from = 0; else start_from = speed_position - diagram.w; if (speed_position < diagram.bufw) start_from = 0; else start_from = speed_position - diagram.bufw + 1;
for (i = 0; i <= speed_position-start_from; i++) for (i = 0; i <= speed_position-start_from; i++)
{ {
if (max_speed>0) if (max_speed>0)
{ {
speed_in_position = diagram.h - 2 * speed[i+start_from] / max_speed; speed_in_position = diagram.bufh - 1 * speed[i+start_from] / max_speed;
PutPixel(diagram.x+i, diagram.h - speed_in_position + diagram.y, 0x00A3CB); diagram.DrawBar(i, diagram.bufh - speed_in_position, 1, speed_in_position, 0x00A3CB);
ECX++;
$int 64;
} }
} }
diagram.Show();
if (speed_position==0) return; if (speed_position==0) return;
if (http_transfer > 0) if (http_transfer > 0)
{ {
@ -158,29 +154,37 @@ void DrawSpeed()
{ {
strcpy(#bytes_received, "Downloading competle. "); strcpy(#bytes_received, "Downloading competle. ");
} }
strcat(#bytes_received, itoa(speed[speed_position-1])); speed_string = ConvertSize(speed[speed_position-1]);
strcat(#bytes_received, " bytes received."); strcat(#bytes_received, speed_string);
DrawBar(diagram.x, diagram.y + diagram.h + 10, diagram.w, 9, sc.work); strcat(#bytes_received, " received.");
WriteText(diagram.x, diagram.y + diagram.h + 10, 0x80, sc.work_text, #bytes_received); DrawBar(diagram.bufx, diagram.bufy + diagram.bufh + 10, diagram.bufw, 9, sc.work);
WriteText(diagram.bufx, diagram.bufy + diagram.bufh + 10, 0x80, sc.work_text, #bytes_received);
} }
void Draw_Window() void Draw_Window()
{ {
DrawBar(0,0,Form.cwidth,Form.cheight,sc.work); //bg DrawBar(0,0,Form.cwidth,Form.cheight,sc.work); //bg
DrawCaptButton(diagram.x, 50, 120, 20, 301, sc.work_button, sc.work_button_text, "Start downloading"); if (http_transfer <= 0)
{
DrawCaptButton(diagram.bufx, 50, 120, 20, 301, sc.work_button, sc.work_button_text, "Start downloading");
}
else
{
DrawCaptButton(diagram.bufx, 50, 120, 20, 302, sc.work_button, sc.work_button_text, "Stop downloading");
}
if (http_transfer <= 0) && (speed_position>0) if (http_transfer <= 0) && (speed_position>0)
{ {
DrawCaptButton(diagram.x+130, 50, 120, 20, 305, sc.work_button, sc.work_button_text, "Show in folder"); DrawCaptButton(diagram.bufx+130, 50, 120, 20, 305, sc.work_button, sc.work_button_text, "Show in folder");
} }
WriteText(diagram.x, address_box.top + 4, 0x80, sc.work_text, "URL:"); WriteText(diagram.bufx, address_box.top + 4, 0x80, sc.work_text, "URL:");
address_box.left = strlen("URL:")*6 + 10 + diagram.x; address_box.left = strlen("URL:")*6 + 10 + diagram.bufx;
address_box.width = Form.cwidth - address_box.left - diagram.x - 3; address_box.width = Form.cwidth - address_box.left - diagram.bufx - 3;
address_box.offset=0; address_box.offset=0;
edit_box_draw stdcall(#address_box); edit_box_draw stdcall(#address_box);
DrawRectangle(address_box.left-1, address_box.top-1, address_box.width+2, 16,address_box.color); DrawRectangle(address_box.left-1, address_box.top-1, address_box.width+2, 16,address_box.color);
DrawRectangle(address_box.left-2, address_box.top-2, address_box.width+4, 18,sc.work_graph); DrawRectangle(address_box.left-2, address_box.top-2, address_box.width+4, 18,sc.work_graph);
DrawRectangle(diagram.x-2, diagram.y-2, diagram.w+2, diagram.h+3, sc.work_graph); DrawRectangle(diagram.bufx-2, diagram.bufy-2, diagram.bufw+2, diagram.bufh+2, sc.work_graph);
DrawSpeed(); DrawSpeed();
} }

View File

@ -607,7 +607,7 @@ void Line_ReDraw(dword color, filenum){
if (! TestBit(attr, 4) ) //file or folder? if (! TestBit(attr, 4) ) //file or folder?
{ {
Put_icon(off+_strrchr(off,'.'), files.x+3, files.line_h/2-7+y, color, 0); Put_icon(off+_strrchr(off,'.'), files.x+3, files.line_h/2-7+y, color, 0);
WriteText(7-strlen(ConvertMemSize(ESDWORD[off-8]))*6+onLeft(75,0),files.line_h-6/2+y,0x80,0,ConvertMemSize(ESDWORD[off-8])); //size WriteText(7-strlen(ConvertSize(ESDWORD[off-8]))*6+onLeft(75,0),files.line_h-6/2+y,0x80,0,ConvertSize(ESDWORD[off-8])); //size
} }
else else
if (!strcmp("..",off)) if (!strcmp("..",off))

View File

@ -2,33 +2,39 @@
dword buf_data; dword buf_data;
struct DrawBufer { struct DrawBufer {
int bufx, bufy, bufw, bufh, buf_line_h; int bufx, bufy, bufw, bufh;
void Init(); void Init();
void Show();
void Fill(); void Fill();
void Skew(); void Skew();
void DrawBar(); void DrawBar();
void PutPixel();
void AlignCenter(); void AlignCenter();
void AlignRight(); void AlignRight();
}; };
void DrawBufer::Init(int i_bufx, i_bufy, i_bufw, i_bufh, i_buf_line_h) void DrawBufer::Init(int i_bufx, i_bufy, i_bufw, i_bufh)
{ {
bufx = i_bufx; bufx = i_bufx;
bufy = i_bufy; bufy = i_bufy;
bufw = i_bufw; bufw = i_bufw;
bufh = i_bufh; bufh = i_bufh;
buf_line_h = i_buf_line_h;
free(buf_data); free(buf_data);
buf_data = malloc(bufw * buf_line_h +4 * 4 + 8); //+1 for good luck buf_data = malloc(bufw * bufh * 4 + 8); //+1 for good luck
ESDWORD[buf_data] = bufw; ESDWORD[buf_data] = bufw;
ESDWORD[buf_data+4] = buf_line_h; ESDWORD[buf_data+4] = bufh;
}
void DrawBufer::Show()
{
PutPaletteImage(buf_data+8, bufw, bufh, bufx, bufy, 32,0);
} }
void DrawBufer::Fill(dword fill_color) void DrawBufer::Fill(dword fill_color)
{ {
int i; int i;
int max_i = bufw * buf_line_h + 4 * 4 + buf_data +8; int max_i = bufw * bufh * 4 + buf_data + 8;
for (i=buf_data+8; i<max_i; i+=4) ESDWORD[i] = fill_color; for (i=buf_data+8; i<max_i; i+=4) ESDWORD[i] = fill_color;
} }
@ -41,6 +47,12 @@ void DrawBufer::DrawBar(dword x, y, w, h, color)
} }
} }
void DrawBufer::PutPixel(dword x, y, color)
{
int pos = y*bufw+x*4+8+buf_data;
ESDWORD[pos] = color;
}
char shift[]={8,8,4,4}; char shift[]={8,8,4,4};
void DrawBufer::Skew(dword x, y, w, h) void DrawBufer::Skew(dword x, y, w, h)
{ {

View File

@ -165,7 +165,7 @@ inline fastcall void utf8rutodos( ESI)
} }
:dword ConvertMemSize(unsigned int bytes) :dword ConvertSize(unsigned int bytes)
{ {
unsigned char size_prefix[8], size_nm[4]; unsigned char size_prefix[8], size_nm[4];
if (bytes>=1073741824) strcpy(#size_nm, " Gb"); if (bytes>=1073741824) strcpy(#size_nm, " Gb");