From 6dda41f1b9f5aaf4b2a18587369aebffbfd8694f Mon Sep 17 00:00:00 2001 From: "Kirill Lipatov (Leency)" Date: Mon, 17 Dec 2012 00:11:34 +0000 Subject: [PATCH] Eolite 1.5: experiments with GUI git-svn-id: svn://kolibrios.org@3123 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/fs/Eolite/trunk/Eolite.c-- | 417 +++---- programs/fs/Eolite/trunk/imgs/left_p.txt | 40 +- programs/fs/Eolite/trunk/imgs/logo.txt | 464 ------- programs/fs/Eolite/trunk/imgs/logo8b.raw | Bin 0 -> 7225 bytes .../fs/Eolite/trunk/imgs/png/Eolite-Sun.png | Bin 9230 -> 3469 bytes programs/fs/Eolite/trunk/imgs/png/rb.png | Bin 0 -> 1327 bytes programs/fs/Eolite/trunk/imgs/png/toolbar.png | Bin 2575 -> 2588 bytes programs/fs/Eolite/trunk/imgs/toolbar.txt | 1068 ++++++++--------- .../fs/Eolite/trunk/include/about_dialog.h | 9 +- programs/fs/Eolite/trunk/include/icons_f.h | 1 + programs/fs/Eolite/trunk/include/ini.h | 2 +- programs/fs/Eolite/trunk/include/left_panel.h | 13 +- programs/fs/Eolite/trunk/include/some_code.h | 41 +- programs/fs/Eolite/trunk/lib/kolibri.h | 20 +- 14 files changed, 787 insertions(+), 1288 deletions(-) delete mode 100644 programs/fs/Eolite/trunk/imgs/logo.txt create mode 100644 programs/fs/Eolite/trunk/imgs/logo8b.raw create mode 100644 programs/fs/Eolite/trunk/imgs/png/rb.png diff --git a/programs/fs/Eolite/trunk/Eolite.c-- b/programs/fs/Eolite/trunk/Eolite.c-- index 2dc46e12dc..22c9eb801b 100644 --- a/programs/fs/Eolite/trunk/Eolite.c-- +++ b/programs/fs/Eolite/trunk/Eolite.c-- @@ -20,9 +20,12 @@ int BUTTON_HEIGHT=18; #define ONLY_OPEN 2 //переменные -#define title "Eolite File Manager v1.45" -dword selection_col = 0x94AECE; -dword lpanel_col = 0x00699C; +#define title "Eolite File Manager v1.5" +dword col_work = 0xE4DFE1; +dword col_border = 0x819FC5; +dword col_padding = 0xC8C9C9; +dword col_selec = 0x94AECE; +dword col_lpanel = 0x00699C; /* @@ -61,6 +64,7 @@ char tmp_disk_del_param[3]="d0\0"; dword file_mas[6898]; int j, i, mouse_dd; +int scroll_used; struct path_string { char Item[4096]; @@ -75,8 +79,8 @@ edit_box edit2= {250,213,80,0xFFFFCC,0x94AECE,0xFFFFCC,0xffffff,0,248,#file_name proc_info Form; dword buf, off; //для текста и буфера -#include "include\about_dialog.h" #include "include\some_code.h" +#include "include\about_dialog.h" #include "include\sorting.h" #include "include\icons_f.h" #include "include\ini.h" @@ -87,14 +91,13 @@ void main() { word key, id; mouse m; - int scroll_used; load_editbox_lib(); GetSystemDiscs(); GetIni(1); - edit1.shift_color=selection_col; - edit2.shift_color=selection_col; + edit1.shift_color=col_selec; + edit2.shift_color=col_selec; if (param) { @@ -108,185 +111,185 @@ void main() loop() switch(WaitEvent()) { case evMouse: - IF (del_active) break; - - id=GetSlot(Form.ID); - IF (id<>GetActiveProcess()) break; //если окно не активно на события мыши не реагируем - - IF (!rename_active) edit_box_mouse stdcall(#edit1); ELSE edit_box_mouse stdcall(#edit2); - - m.get(); + IF (del_active) break; + + id=GetSlot(Form.ID); + IF (id<>GetActiveProcess()) break; //если окно не активно на события мыши не реагируем + + IF (!rename_active) edit_box_mouse stdcall(#edit1); ELSE edit_box_mouse stdcall(#edit2); + + m.get(); - if (m.x>=Form.width-26) && (m.x<=Form.width-6) && (m.y>40) && (m.y<57) + if (m.x>=Form.width-26) && (m.x<=Form.width-6) && (m.y>40) && (m.y<57) + { + IF (m.lkm==1) DrawRegion_3D(onLeft(26,0),41,14,14,0xC7C7C7,0xFFFFFF); + WHILE (m.lkm==1) && (za_kadrom>0) { - IF (m.lkm==1) DrawRegion_3D(onLeft(26,0),41,14,14,0xC7C7C7,0xFFFFFF); - WHILE (m.lkm==1) && (za_kadrom>0) - { - Pause(10); - za_kadrom--; - List_ReDraw(); - m.get(); - } - DrawRegion_3D(onLeft(26,0),41,14,14,0xFFFFFF,0xC7C7C7); + Pause(10); + za_kadrom--; + List_ReDraw(); + m.get(); } + DrawRegion_3D(onLeft(26,0),41,14,14,0xFFFFFF,0xC7C7C7); + } - if (m.x>=Form.width-26) && (m.x<=Form.width-6) && (m.y>onTop(22,0)+1) && (m.y=Form.width-26) && (m.x<=Form.width-6) && (m.y>onTop(22,0)+1) && (m.y0) - { - if (za_kadrom>0) za_kadrom--; - if (curbtn0) za_kadrom--; - if (curbtn0) curbtn--; - List_ReDraw(); - if (za_kadrom0) curbtn--; - List_ReDraw(); - } - //скролл - if (!m.lkm) scroll_used=NULL; - if (m.x>=Form.width-26) && (m.x<=Form.width-6) && (m.y>56) && (m.ym.y) || (m.y<0) || (m.y>4000) m.y=scroll_size/2+57; //если курсор над окном - id=za_kadrom; //сохраняем старое количество - j= scroll_size/2; - za_kadrom = m.y -j -57 * count; - za_kadrom /= onTop(22,57); - IF (f_visible+za_kadrom>count) za_kadrom=count-f_visible; - IF (id<>za_kadrom) List_ReDraw(); //чтоб лишний раз не перерисовывать - } - break; + //колёсико мыши + IF (m.vert==65535) && (za_kadrom>0) + { + if (za_kadrom>0) za_kadrom--; + if (curbtn0) za_kadrom--; + if (curbtn0) curbtn--; + List_ReDraw(); + if (za_kadrom0) curbtn--; + List_ReDraw(); + } + //скролл + if (!m.lkm) && (scroll_used) { scroll_used=NULL; TVScroll(); } + if (m.x>=Form.width-26) && (m.x<=Form.width-6) && (m.y>56) && (m.ym.y) || (m.y<0) || (m.y>4000) m.y=scroll_size/2+57; //если курсор над окном + id=za_kadrom; //сохраняем старое количество + j= scroll_size/2; + za_kadrom = m.y -j -57 * count; + za_kadrom /= onTop(22,57); + IF (f_visible+za_kadrom>count) za_kadrom=count-f_visible; + IF (id<>za_kadrom) List_ReDraw(); //чтоб лишний раз не перерисовывать + } + break; //Button pressed----------------------------------------------------------------------------- case evButton: - id=GetButtonID(); - IF (id==1) ExitProcess(); + id=GetButtonID(); + IF (id==1) ExitProcess(); - IF (del_active) - { - IF (id==301) || (id==302) Del_File(302-id); - break; - } - switch(id) - { - case 21: //Back - GoBack(); - break; - case 22: //Forward - if (HistoryPath(GO_FORWARD)) - { - za_kadrom=curbtn=NULL; //вверх списка - Open_Dir(#path,WITH_REDRAW); - } - break; - case 23: //up! - Dir_Up(); - break; - case 24: //cut - key=24; - case 25: //copy - goto CTRLC_MARK; - case 26: //paste - Paste(); - break; - case 27: //goto edit_path - Goto_edit_path(); - break; - case 31...33: //sort - IF(sort_num==1) DrawBar(onLeft(192,168)/2+210,45,6,9,0xE4DFE1); - IF(sort_num==2) DrawBar(onLeft(115,0),45,6,9,0xE4DFE1); - IF(sort_num==3) DrawBar(onLeft(44,0),45,6,9,0xE4DFE1); - sort_num=id-30; - Open_Dir(#path,1); - break; - case 30: //about - CreateThread(#about_dialog,#stak); - break; - case 77: - IF (show_actions==1) show_actions=0; ELSE show_actions=1; - DrawLeftPanel(); - break; - case 78: //rescan devices - Tip(56, "Devices", 78, "-"); - Pause(10); - GetSystemDiscs(); - Open_Dir(#path,WITH_REDRAW); - DrawLeftPanel(); - break; - case 80: //rename - goto REN_MARK; - case 81: //Delete file - Del_Form(); - break; - case 82: //create folder - NEW_FOLDER_MARK: - copystr(#path, #temp); - copystr("New folder", #temp+strlen(#temp)); - CreateFolder(#temp); - IF (!EAX){ - SelectFile("New folder"); - goto REN_MARK; - } - ELSE - { - Write_Error(EAX); - ShowMessage("Folder can not be created."); - } - break; - case 100...120: - DEVICE_MARK: - DrawRegion_3D(17,id-100*16+74,159,16, 0, 0); //выделение - copystr(#disk_list[id-100].Item, #path); - za_kadrom=curbtn=0; - Open_Dir(#path,1); - Pause(5); - DrawRegion_3D(17,id-100*16+74,159,16, 0xFFFFFF, 0xFFFFFF); - break; - case 130...160: - tmp_disk_del_param[1]=disk_list[id-130].Item[4]; - RunProgram("/sys/tmpdisk", #tmp_disk_del_param); - Pause(10); - GetSystemDiscs(); - Open_Dir(#path,WITH_REDRAW); - DrawLeftPanel(); - break; - default: - if (id<200) break; //кнопки из списка файлов - if (curbtn!=id-201) {FileList_ReDraw(id-201-curbtn); break;} - else - OPEN_MARK: - if (!isdir) GetIni(0); else - if (!strcmp(#file_name,"..")) Dir_Up(); - else - { - OPEN_DEV: - copystr(#file_path, #path); - IF (strcmp(#path+strlen(#path)-1,"/")<>0) copystr("/",#path+strlen(#path)); //если нет, + "/" - za_kadrom=curbtn=0; - Open_Dir(#path,1); - } - } + IF (del_active) + { + IF (id==301) || (id==302) Del_File(302-id); break; + } + switch(id) + { + case 21: //Back + GoBack(); + break; + case 22: //Forward + if (HistoryPath(GO_FORWARD)) + { + za_kadrom=curbtn=NULL; //вверх списка + Open_Dir(#path,WITH_REDRAW); + } + break; + case 23: //up! + Dir_Up(); + break; + case 24: //cut + key=24; + case 25: //copy + goto CTRLC_MARK; + case 26: //paste + Paste(); + break; + case 27: //goto edit_path + Goto_edit_path(); + break; + case 31...33: //sort + IF(sort_num==1) DrawFilledBar(onLeft(192,168)/2+210,42,6,10); + IF(sort_num==2) DrawFilledBar(onLeft(115,0),42,6,10); + IF(sort_num==3) DrawFilledBar(onLeft(44,0),42,6,10); + sort_num=id-30; + Open_Dir(#path,1); + break; + case 30: //about + CreateThread(#about_dialog,#stak); + break; + case 77: + IF (show_actions==1) show_actions=0; ELSE show_actions=1; + DrawLeftPanel(); + break; + case 78: //rescan devices + Tip(56, "Devices", 78, "-"); + Pause(10); + GetSystemDiscs(); + Open_Dir(#path,WITH_REDRAW); + DrawLeftPanel(); + break; + case 80: //rename + goto REN_MARK; + case 81: //Delete file + Del_Form(); + break; + case 82: //create folder + NEW_FOLDER_MARK: + copystr(#path, #temp); + copystr("New folder", #temp+strlen(#temp)); + CreateFolder(#temp); + IF (!EAX){ + SelectFile("New folder"); + goto REN_MARK; + } + ELSE + { + Write_Error(EAX); + ShowMessage("Folder can not be created."); + } + break; + case 100...120: + DEVICE_MARK: + DrawRegion_3D(17,id-100*16+74,159,16, 0, 0); //выделение + copystr(#disk_list[id-100].Item, #path); + za_kadrom=curbtn=0; + Open_Dir(#path,1); + Pause(5); + DrawRegion_3D(17,id-100*16+74,159,16, 0xFFFFFF, 0xFFFFFF); + break; + case 130...160: + tmp_disk_del_param[1]=disk_list[id-130].Item[4]; + RunProgram("/sys/tmpdisk", #tmp_disk_del_param); + Pause(10); + GetSystemDiscs(); + Open_Dir(#path,WITH_REDRAW); + DrawLeftPanel(); + break; + default: + if (id<200) break; //кнопки из списка файлов + if (curbtn!=id-201) {FileList_ReDraw(id-201-curbtn); break;} + else + OPEN_MARK: + if (!isdir) GetIni(0); else + if (!strcmp(#file_name,"..")) Dir_Up(); + else + { + OPEN_DEV: + copystr(#file_path, #path); + IF (strcmp(#path+strlen(#path)-1,"/")<>0) copystr("/",#path+strlen(#path)); //если нет, + "/" + za_kadrom=curbtn=0; + Open_Dir(#path,1); + } + } + break; //Key pressed----------------------------------------------------------------------------- case evKey: key = GetKey(); @@ -417,40 +420,41 @@ inline fastcall void draw_window() int min_size_y = disc_num*16+195; if (GetScreenHeight()<480) - DefineAndDrawWindow(20,0,582,GetScreenHeight()-30,0x73,0xE4DFE1,title); + DefineAndDrawWindow(20,0,582,GetScreenHeight()-30,0x73,col_work,title); else - DefineAndDrawWindow(98,90,582,482,0x73,0xE4DFE1,title); - Form.GetInfo(#Form, SelfInfo); - if (Form.status_window>2) return; //ничего не делать если окно схлопнуто в заголовок + DefineAndDrawWindow(98,90,582,482,0x73,col_work,title); + GetProcessInfo(#Form, SelfInfo); + if (Form.status_window>2) return; if (Form.heightf_visible-1) //если мы в конце списка файлов развернём окно появяться пустяе белые кнопки { za_kadrom=count-f_visible; curbtn=f_visible-1; } //это если выделение после схлопывания окна за кадром - FOR (j=0; jj) Line_ReDraw(0xFFFFFF, j); ELSE Line_ReDraw(selection_col, curbtn); + FOR (j=0; jj) Line_ReDraw(0xFFFFFF, j); ELSE Line_ReDraw(col_selec, curbtn); DrawBar(192,paint_x,onLeft(27,192),onTop(paint_x,6),0xFFFFFF); //заливка белым доконца - DrawBar(onLeft(168,0),paint_x,1,onTop(paint_x,6),0xE4DFE1); //полоса серая вертикальная 1 - DrawBar(onLeft(95,0),paint_x,1,onTop(paint_x,6),0xE4DFE1); //полоса серая вертикальная 2 + DrawBar(onLeft(168,0),paint_x,1,onTop(paint_x,6),col_work); //полоса серая вертикальная 1 + DrawBar(onLeft(95,0),paint_x,1,onTop(paint_x,6),col_work); //полоса серая вертикальная 2 TVScroll(); } @@ -571,8 +575,8 @@ void Line_ReDraw(dword color, filenum){ name_len = onLeft(215,165)/6; IF (strlen(off))oZV25A5xb3t5|1L?BGzn%O|DbpG zynLVE^M84skd>98$;QZJM22&&F`OW>$BvVK!Biq^yy7~gN_LI4GwUX@Ca5Ro+|w&P|7p(Dv@?PL42v8@XM1lX$OtoJOMVkHQGYl_!aF?0vxfaT%D=jT3Exog1l038Mi_~xAc#yABpXyK#99pFPSI>ssYs+sj!zY?n+fb=i ztL;?}7dyvISy42xe#IkjV`0u^5x=N)-H`H3BxH}80HxL1&5t=7?P{&rCVpa*)@)Wo z`>N%?oKBY1+G>rIi>bf$ao|o^W~NrBE;T|n-2_t+TJ^+Kvt4bstML;IMB=CM$vRV^ zS+c@fk{w%r|5BT|R`D=IHdUZNso87?Gn;KN8Q z!G{y&X=7wg$OYn8l#ns9rx0<*F@nSuzaMUfCom*s#rM}eE z+_IsywRK}#bJI&BSd*#p*K3M%s%xCiTum~WVi6PB^Eb_GEGe1lTHd3OVc_L zYcv`ulB6d-y;v@vTQnm+n?zvtym|BBHj=4Sn#Gp<{E`y*3s^K@;?^U!v8AO+>VOe2 zj&dk|S4lsbql}Fb$QwVU$U-|vN9BteIZ%I3Hs&K&vi25$Zj3SbZjW@rxW-0`a;z+d zlO!hevbie_3I|D2RDM2H3Adc;ah5`=WG^=Zq%DTI0lu4Gj&$SGQS^rjxL;!n^bt2p zFC@Vz@DNEpHe0UwV-X1}NCuk++c08n_}vulr5u0SvSrKY9L;{^zCS?!QuT{^-;B~&1B(+}9RklqP%%%Ae~V!N3fL(3?Fe&c*ziyR?AxM37ZPDS zOkFfq#QBT#T@J2pvJT-k8S@ALTgh2!ORyLTMhD?}3t zUpR{CIPDePDNRFwLh=5Yumg7PJoCQPBw{VcSr|Lu^LTuFPj4N|jAhUE2L=avd~wio z^sa$m@ce~S{ay=D!}H-h_~64c7cX8s^Wg{4!W5~2OCYraqRxASU}$hK6dDNj2=P_G zeIx|^g3sp<4$@JkRO8|)6Mh}h+C2~et(JxZe!%(!0p`L234!9E3A%?q7B??WMo`SL zpi#~V~%r2haTGf=T0=#Nr8_rW0CldScz(Jo$e9*LELiEv=?2= zeIzARdMHvOQjZ5QO0egIEk`58ai4@MbOZ|X6NSbog~B?IRfHDB#J_OoAcdipFr(04 zq8f;NGAj1L5S9(3**M_2Avac=1VyR{O_T~t#O$7BFZ6g)iA1Ky;NCGJHLSI}86fi@Co-QmoNWTW$ zW_Ryp5Eo9+-YWn-91>2rppIGAGVD*Cp>KHH#|J|_m~T)Rn0i=oeh8NL^3_lSjXwu~ zMt2W)!ZLk9AJ!ZQ^@fD_b1p8SJ}Msw3Q%R(h-oL5+(}n=-|#?iy8{J_76`os>kRjJ z&LPrZ2n_hr1Rt&uNaMJ5IPNpol@J^{RS~43`)be+yB`qvqX0D+j$G|Ym=sUI!yv8& z1n*}DVX1RbCfz$Acs_P{2YkE$cRt)uX?HK~Ii88-;OG+gA&fI{;eVGyc*HfhuE0&S z5SWI3z$ebS#y7{GgwQo2RJ2crAt^cDb5OCJ=RZTJH<-?)$?*W-_lpMsYjGV3025pU zja^+l?^6Jj4P~qp(}1TS%E&#{D`p(5jycD}E&$3LPJf=H&^p8#5ZWCWh8TrIi75xm z{Tpx4J(0%b^OLr6pWr5sTporiGX5Y2FYIC&hV4pspd@E<{{iTc-cS&KdBhI^>h=zX zIh(lyxB~zUgp&UB0^bUIJKP83Z{+xulYVjkh239;lPE!^I2hAQ=;{=bb|%G1joc6< zBa}@tCX7I=Cv&HIEKJ(65fdSes$^XpU(Q_kKguQK8buIhJ7Q8crAu|DvN$Ck#sbKbT^A|Jce~UiF+`Pc{+@JG?IKh zlw50vU2KVIONM1vg<)ESWLt=6QHN_#iECPlZd8$LT##}@i+M?ocT1FZPndr}nSM-= zd`z5hRg-gDkaSv_c~g*lQ=NNRo_$oHeOjVqWQt&Fi)dntW@eCQXp(7Ul51&_YipQb zaE@bhlWBUKbz+ouW}kIvpK)-UZ*`$;exi0~pnPMcer2h7Yo&c_s&sUvaeAb5c&L4I zrh9X&dVH>ZcCdYVux@~)aD%6FgsOCiu6cs4c8allgR^;!wS11adyuz%lf0BAcbYPN zs!3$6P-d}LZNF(qyk=FoWp2uOH^6B}$96}@d|816frJZ$h7pE_6^Ml!g@PQ3i4=*B z9E6M;jD{hGf+LHED2Ib6j))_NjUkSVEQ^CLk&Gvij4F|YGLMKehl?_cjXR8lGLeHk zl#4Z#j60Q*B#4kBkd!Nwl`)l;GnkY*l#@D|nlg}?Gnt$_oQ*||fkc#oLz#k2m4Qv0 zi$Ro)L7Iw8pO00JgH@Q0QJ;%kn~+A2kwlP{M4FOJk(N%Koj{$ON}G^ZkCRf8l~bOQ zT9KYnotRpeom`xbU#OB)qLy8umtLuyQlpk;m6&;#fMBD9YpaW9seyH`pJ1n>LWQJB zo2ycdphKXfN~ESxrl(SbO;xgq5C@oPmY4fQhz%l)j*bo}inZsE4MdnWM0Y zuC{`-vy8F7fWNqkwz-bDu$!&Bmbt2>r?9H6x2d(dwYPwlz`&lqz^lE%y1u}Jz{HEh z$C1awo59JG$;PO}#=6AH#mLdi&eYA(+SS+L+}`8f;C}*tDcCQ(00001bW%=J06^y0 zW&i*RJ4r-ARCt`NmJNIp3(=3U1ogy)fRU2qhuSi?6l9C4nOp zxLP!fVsZuBs<5$1%UT&Pdm$A!F-d0wE+dlInbg@z3yk89Qm_n?rqC8flDmWbpS#N? zmt0fJ_?1sTT<`At{GZ?d<+%~P!fuu}a;f+J>%A>co!NpkDm4!(XVBWA zdO!1B^uIWiv8hywnxZehPX)Cj!$sTpRrkg2b-BZ&_ENgnYOO0LtJA|p%!0M{fr0K# z*FaUj?{`(MU6@+xi20ha!hdlf@ZD>mY8QUcA8@VXv7!;c{EpG;^bZX5`=$-oR}TA_ zzq`AsMhRH>;X|gV*+$ao>+c`v?|&m_fp)l5g#Ar-cfkK^l}0!7=J|Zcz4x1(zV3cd z_XiK;skEAm^(WU`l=d-qAP{gvRqD!!S*RYU*%o(zg9ZW<8MwdSj zKv4ht<8qZ6>TS!zstmJ0p85jWRWy|_dA)Ae>xy!>$Ln%(mz-QK z5Bzy?|U4;dv?3XQSqjerLMHYyNKHG>N=O(<92&IJkx{z?{?ST zT54}}@oIEf4I{H(*x+B{7jPC}*L$~KrRr5hKjiffax?-n(;9BOZG zZ)OWttj_kOMfqE5{YAT6d} zlo2=PDJ4`u&Yx0jBrH}-*;{HYV83cDuRvg4g)KmBOA=fc#&5!N<>e%48J!DbC7G(5 zJz8(FSgj;kQ9+i$(WiObKq4%!cbb9Hngl%r*Uj%#B*{|zwH!EglaH|x_huQ0)mAIQ zqTjDC)T)10Y$fBb!2VIN3ALi@BH=D+`SSSj0tE-uDy2d(J?~4L4_2@j$tvh+Ao3ERoLX9* zjz3_v5KF(UgpZD1DOIP_YBhkq1+WPT?>wK3OaebILP4hNS?ZKn`D)ea)QXXYWGt_b z1!N*wJow|JX9&WipQM&VEB2O7I~g;WOeTULBvcWJYE>ksQ1KM3I0vAwMqzpbj+;0U zyoz{cdvY5fY>{xE;GZ_(#-ApeFycyFEOP<7dKJ?nvVb<3o;}1fkH#fL{H%yG=nd!v zygJITA}c`!?B^H;R6YM3_tH~w=)VLB+@}&qcpgJKNi%ZPD-3>FR zNx-&!x{Rmd0ujTmV&rUF!y(XyCobxxJ1C3|9(Ek0GUmpUZK}xVxU68 z4krf-**d&TNF|Rw8IAU=;-K&Y191J0b4-c@v=tLQ<=#Z8E=*7%)IvV{B6dwAMn`t) z<2lQ^y8di5g-T-8Tg^$e#h3b%i;u=DYw?ru@&_4LL9B*QjHY8}w=N%vjWn#NvUP>} zVp8g9;#4RcKCx|0mD!loVFdB=GmDQLIkNbfm&G3Cu(r(*Y&GPbp`+noS646?3im~6 zsRQh#XgCs$#UkM@0#BI;{2Y<=K8}}!Y!I!n?mz^%v1kb=`=XIB+I7-sNuyp` zpO`L#QY}frt_q`6!M54Ks4V*t7BAK~br7gXHJm{G#IjPTgnAlFqayBLv2q1#OWAuW zmA#x5pH_y%fK3gSkQiVvZ0n;lQCV7_bu|&J5N$~bP>Iw~&D%xl)^KL3Gb;;QUiD_x ziUhR8R$nTyfUuNumDRbEFD!5%GxahAy16qL4u`vJYgQSJCiB+%&fscfLdlwVxP)c% zHrRh@XP6M?Kz&9B*t#rZeJ~tFg%a)SLEQ&sSci66(y^U)7e(2z52#y$(H&5%Ks9zo zGG&X-TGbWoqxlv=C5W0Y0?wMZ9}m_MeBVOYohMEtfTYS|(-vhf zTY93*WuedD*Y+Tqcy;(bIGt9bx~>YvGE-&5GUp(FhxWZ|Gb-NN1i|^3;#eK9_9o4E4pNlNpRSWxy~)PsTYQ z4`u%f)FmCka4fy>82UmrhOLnEV5nFR0M!z%F6+C`@)Y$)n~z<}d0m*jGS zsw~=bGMavK$ZSDT2IUhiaA_H1hoaI(Y_J9rxH3&SB$cVbwhhui88j4?J%jC&Jw*N= vDp+8!MXo=UIe&K0WL+~Aurb-D%&7kX!%1xT!x#yx00000NkvXXu0mjfChWl7 literal 9230 zcmV+pB=OscP)(dBO_oH z8~bfsdE${1ti)LId3R&?0d8(?2Krh43qp7J+8(uCPQa?R4BJxnQvOSiNWk{f3R=DBAw0OC<~ZdH%W}#Z z5*Qe$3=Iu+j*5zsj}%7A?&ngZ72@<#(@Tnq*ow$AtIk||qy7zcF5?`l46FRe)6+A? z)z#Jb!0K68Wq_CKkh`wLrG%MX%)iT0Wv!17jrWg;h)~A{#wx>w@O$dCi)u#(H>pHf5Vi6=%s!CtL;mAzK;8fz|W zW*Y}?{K(78Ym`o{^Ln6x1z_?0<6VXg8|HCj@sSUoPkWv{_3%?{=b)Xe#J}XZ+1+M` z4IDVoZD8m?=Q{-#%U%LB-H;wus48qI*OmWc$G{!z`E}2;*K1#AzpDHddok}tR?xTL zSz_!6PqnAlgYI$xSb6-|cx_@#V!z|b$NzSr=mL8o>jlfxi=Jk+y=wnBy~p%E#9VEA zaKXSI@+L%<$}&ANLrf}DW2sx|w+-P9?BGKO872{IeYN^k_DcCH?97@oE#rg6uOW9U znoiX{=*EkKyCimra@w?M#_R#v51&mtYi%|+vzJUSS)N_}ENh5q_-J&*=j74~Z7tL){{ zml;0SjIVi_)Ihwqn|COkuKu}1UjSD_V0kwTX=sKaAz-cN^UqtcTuY-%kM!-^*N+Su znBuT@8Xx!As92Y>kg^FChKiQ4%CUn1^aE|kV7;M3b2YiC zbwPD7F4h;aUjV??vl(aE<|&(-gM)+n^!MrSJ}G>X20FPhwy_xrludm%eHsxE(Q|%n+2=X?F-cs-V6w8$ThFaO#||z&csVQ}Y>}tVbA*SBhxZi! zDTdV4RMocO+bW3dY_w|hG__jo3DxkxssjK^I#yBWTzF<%8t<+14x~xbE?>S}Q#ib^+y40dpKj^Bg^hF>xj>~- z`KtxB`d$DldNQ4_Ru*+#q%|wdSDuW2lEEV&4}pU~AhV+hN52gV44W9-CD<2%1LaXi zZ|l2_K_4T|PYOvYCtcga6Z{ zPqQ;C&#>oGpW{J*y--_L{I+Mxp09#}f~G!dd~|-XTk$(s`Um0;FsK$tMsUVqtyViK z&^a)OfY2a8B>Bx!Xe`QY0cVUk6oeNjU{Ke~)(^@T@|z-rPBMz38gR;W&dsjrQo~L@ zcG7xg#TgDLbMaizoL&#OrAUg+;vCI*i>@nFY z6lF@ z?pu7Catq;GBe#A7{R%)%K6;YD3qT-%FFSpcU=r~AQ}drr~X5L$-yO^h{=FRI@11JdjXL69TNcIe^c9F|E>|c z{<+p??THOR8~*ads3+LbxkveA(seDz7Lm~P0Y0q?D~W|B#zIWwSvgAVFfzRVq%nL@ zqAz*1A)?_TLTH@7f71SzYM<(sk*bkv6f(tNg`hxM(z!E?mjee@Vfr;vdE`EE1BSsu zIA{bQzQb?OqkBf};pG$>@Qvf>80qgH5*#ZXk9PooN!>ekFN4k{(5(0lss-1DATb0H z!L_~9F->!u*rDl%tN{_qs7T-%?9s~0^2hfa&SGF&s3LKo4DTbpJ#@uhex;jFsN z?{_LcwOvdC7l2AD2w;-BvVyfxCu!bkXFWBZGgUHG3=P$tM0H=?EHMgk5(PR|_K4pj z-Ku=5{_*6LC)vTN2if77hk0lJe-ZRY5={QVX$P&OM>&X+Kuy6Pu8Xd_ILA1rit1;R zU0htEXvm&opmBfph)GU1vik5{C3(dE5!H|(LtOLK`KO>i4@^2>K_~4y{qGb^G>j3S z^eG3qcK}a;`pISQxV_gKM>PJmx_|W_m-;Q;sMF~lqCCS$jY1Pf!!?MY-q#|j1D1WN zJT;R1z(qNloW;q84P2EKx)t%8du)awv7*C#06$ROXZuPD!->XRm$XuI#ik|hqc1mpcI#sxYeGkv&%!u-`L)7yJh$A-E8;J z-K;LW?t}5&#z)Tgo(U6ivYT6Ois*UAr2)7`wPqc}G1> zJs^Vpg?<3`m`ADZzVna0egk=Wib zc*pf!Lw2!-sD`gf0!vO;`Bhy7*kCRPm@I5ZvTtl7dpj?hUEC%kP@RdDVeHCN1AkbW zqB(nU9?nNQ9kq{ZLmnUgIHPdef?^~Bg4%#uR%$H$oT91yOVvw9p^8Ci4A(r5yy+#H zk`FT+G7!4zBZWxi9WmCfTIwJgBE?GAm7$rc%$eCP+4FLAISW=AS4P1wA(?^XMXX1x zW{`G}uB&fX<1F2*VHL)T?@^AXvbSZ|;9b1@O`FshfJQh8!N59_w{k>KNiOa2;cUEe zB=ScICP6y)t=#BaUIW+PHFOtWRp`^sn4Q+f0gYC;hRBL-@Y}%3eaqji390!FlJt4< zykE=Z^4@Ym?sG?3ED2DsGF_G4pBhXztIThsZjTv-{zR-z7r$N;TJwHkU}4(e;K81h z71E6J8mC4ng_0M#97WD)97hT27V0pgoTzojpdA*zXCAJ8B43xa;qjz#OX{@W}_9AVYfht#udb@t18C;ccST0}kj z(}DqU&%RTpW9B%@F`mOVA#C8~VD{XMM6rct)I#B$mGmfsV1{X1&wsBESicZU2MOze zhJkMLwDbCwxRzYS@7wxqV>_a49p5ov$1P?5=u-BlEeftvZQ{(A_T~K{?DB!o9~L_9 z(%t}mo=p_IJ+ynf>o!I=+WJQ;ijOODJKNM_6El06KbfzbUqfN*7-DNAVPh1H*H25d zEEkq5$ikaUg6TRE5L7X}R^Oxk+Lm5h7|I%3`)p-f`fPz-Vu+QuL~OCrXA8cEo+=3` zIS4NR0HgZ)sQS@4#m3@G&|j3fV$x)^m&X2$TwY%{+y+P^8LUQ?O~@0tw8xiS+80O? zbQ=lepnkebf8$)tj4*SlL>`+82lDhor^mVpa`R4_&2o(N3mn!!Yt& zds33c{cikL$7RB@z=^VnQGK2Ij*C`B&lsd0G=GL_MqY|KqF~VL$3x7 zHUxij13*IR;YxvjLD3`Lj|?B_HL_QNTf%bMS^eitVVn4*Y>U{|q3r0tk$t>HLqNE2 zFd?7r(6CQ;x^im|U3=*X|J#TkvD@8tJkBHG?NECkZ*}GEcXVAWcZ>mkc7fIqe0xbe8+yPqv)f#!f&G_gD=fk0DL+6+!JBkW3tD#a~0vY z!Gh%iJqkubRnTV(I=H#}W`KXaE~M@ny<6(L*Yjfl{FZQ{pKMaXW*>m=kj)JK%;&8>$M8{L4D%=3v1wguM4bW zR29Cs%4t=OkBbjH9al@Pr{JmgSNnSs*nX=WSMTTG z`fjj*z4hH}!U4tKq4m~Hp_};UHUiMYZWauxIc2;Erk;ayiP(4PaZdtG0@L>fkbC{x z3jf~Mb{q%U^9Il&$QM#3*uWE|O&@yL1h$0wZ`~NOk)i)Jel@H>Rq)#+MbZ?wljOfD z?=~=SuoG!Z4wix3Pw;c=<=iVM&mr$hnYN5kJqZ8t53Xk$gEw+Z+D1a#3I@AI4DEwa!`_RNGSPU(1SJioZ{kB`&9xtM?cD?@K1jfkIfYS-rw>#bZVCB35oF zx8ULkWg&F|bvB{pv@vMo4e4qp!EFWLzgyU^70}CjyVyV?zyRQ92g69h*=L7(v(FCq zA-^`FRq&aAf2fzu26R_GDUzx{`}ULFz7K8sNBu?rAs|kbR~0K!marwVB}w-c z+)yDD2?%YLkoB_J(aegJMV4}HIYVKs+N+woXjn!N32-g}Hjz5bCCDak=MCZ@fN@|S z0ODW*NI3sZQS8dm0Tk8_vW2#-LZ6S?qAuhRIM@K0atNHwm>`;{xAS9Kuf-*>t?<54 zA7PwZMH~aAJ*^lQm1nLFk_{TH6qGvA7TwzfjJP>LxmZ{{k~W%sPj>+_lat8`1{W)f zS(&DcRp=^MrLmG#xmVf1_PqhN)Ny;zn^WR!pn|0Y3Rq|ZG+N9N3}c@kAHlvjK9YTL zVzix%qVHnGoWWob(Bw8Inr0-;0l- z!o9+R@sQW>E9|79a?JfHbrZNy37P~UVG(5!T8d;vj7rJY5>*LnS3C;2*3EybE*D>_%^R>mux60n$Ys0#={wwGG}681lPx^p0S zZUD>v*bouau{HqDOkrO=JC%L)+;ox|HhFd$egBXRWC9*6wt+i{PYx#O;uB%4u1o2S z2?aa7tGS@ujq8_cO8IJ&fGk$fJFP%2GMmt4sbbhp&CdnfVEHwudbcYdJO;xmP&wPvH@x< zL#dzCXItM1V9r*#nKPEN*0In^!o~<=mZ0Q)zgWw`6&uIw`OkBlmzge0e;1vx2h?6g zU?38sIjhO=LAG?uWS0&|z{YTZI9mxYFq4A{K+iqQzJ6hWP0r1?flDm@@=UzQ+EJYC z(9f3+MzDtNnH*SL1Mgh)Ho=NQAJ8XSbyvv{Uuy-}2C7v87i57g5n1~tjW;+%2r*0$ zCaAC->3-ae>4=~LfrMDK>`qLMpC_AFo9>+c4t2H#pq8jhY=FAj0V=8r$xxhKI+GhM z&R7^L4(w#x@+SZRv zt-!W2mL}kfQ{!x^fEfR_X+mq8ynPZ0;8u{et&FvzkE@icPSZG$$?84RX=ZA^BL8a< zTnj+uDo#`h05{Vi^9^Ee8QtG7iJ0q$XjQC-DeN9ZaaUDZ2U-s9bYIJ_+UV4FOTRs+ z5}@3OdD;Yq=B>gBHseL?gVpCcmUO92zs|QYmCHQ(ewIzg(gZ*!!+5=8j^ph}ZE}5T z2eLhbC6z=~0uFAREN&Tv@?B|6zN4H*jm=f$ek2(+cm~A9HsC_%LMYYxCCLYrA$%c6 z$T>hIt68F3c4sf-amnrSpo_k14=ORWg~GvW@DwOFYo*RxIZN~etg)gEpfD(srIsxB z`J{#Ha?=PqJv-HAsGt%6FjN3Q71;_kaQWy+_QJA-H(CES2CHLmt<=XB0Gpx8c!P!& z5-bFxB5R;9zT0xy@;$V3@;h$OMAmX~vWWyPgwn27s*k-mS(yBgN>KUV4O^WE)VFZa zG9n2KHfoYu0 zSB_6)|6!WVk8kg*b_B4*-cnuZzv#ZPE9e{DJ7$HtA|m{gwq&AW;70|L-v>H4(Y$8le81C-dHg(+D zuI)Uhyj2A3C(|6KEuzmuNU%#JYJzOSvJ_>?p$v7#8|yUdF06N3|4x~{>>6jQM`g!= zwvWohFnDvfN_KMYD)xHrV)py`x$F;H=kRxYJ~eMOWuq!uk8KlKbp$Y77uTnLSZVcK zdr0}vhGptyO#qiz3wvNmRi&Qu6@0tHPZty18gY{b7}%E{hZ08s&hi$#r;=WsNZ-Yh z3>NisH=2wt&VsXEG;DX~5o9@LO`@5_-G9C5LZP&T0%*p4M2i`Wiw%_zeYi+hbcGnp zH|uhyb^vOJIR(2IzfH1)q)q%EbaU))53oJBB5QeHa&@`?MSUDf;BMi@%(d11`fIK- z_artWFO@Hi07&BIVx8#yV2n@~KBP;1bb`){JR^5;=b_5ZfZcJ5Q7-Pda}yiIEU5#8 z0R2+s(jmF7xtl4)_`j_xz|$_Y?EqAJFmIO?>nJ;QD}e36<-mH`)DTz;^%UzIn?il= zK{c*b>s;2IFK{WiOpgS3FGrd4E_pcH<7M%~MApiAxnD3i6Oc-=vf$j#6S(^uJ;VYe z8gpJDTM?D1$Xsqxnhwwn#HUGDeM~y*x};lqLPOH4_H69{)b?QBl;dqD9Rl1Q+zwb< zZY<}?l{Ic_o}ox8TwLlQw2Yz729fj^tFv81VC~B@4)<#_98Z9gDwsxY)&)4!tr3>! zV)3P=Ewi*5EqmR18@6@`YUnMbJ;3e2wP$U6U^!z+=bLrr&uJ{tRNwLyA9JE3-RS{w z7u=1a+tev{#c;~!I_0kANej`Z1CTOYHvxO6ptb{7I*%#< zye+yD=eEE?HKA|RN6TpE(TT7N;>~q(Q54ehzwb9Ui%fOQamZOE`g9fw_beP(Rq;)X zwRf}H1B)Fet?4|vZHcptK)G9B+cOqzw*l79?IKUb3V(Kn?)OwvNGmW79W3bO^(1PTnS99$`cl~RYs$~HQdZjOLht9`4jt=<4JtPN{JY~b?u zTYxGZ(>ft`My$F^^}kw^*?t>ZjTZ;j;|8z@T2`o69Hp^^k!Pdp)MpzY7(h;dHg*J1 zgz*hRJLD*Nnov{+_E{`4Ue;SgT-Hj@N?uEn)IqUN@#SLQ;>!}lByc3wO5pvVeieb` z6NEChZ}G)P43F&NfMODT+U8-=pE8}Te+29a_^9N+8awrA9Fno3Sa=sem15>BS=Pso zIz4)9fo#FfWO?$5Y-RQbmpuMVjGmTtYjZm(Ob{j0Cx0iCOjtDgY4G?^BAwxUk}7Perna_&X|OPM-DrvWQP zS!qJr0IG5Esv%fr7S_o5fYrD~B}uTtOAD^bd*)dbWLu#cG7(mr62^e8ct zvphx}la}nByctX-eR>^jWw>WF(=|pp2~J%LjfE%eeOJy_5md9r{0)Vn)8NC30Z!)` zuS6ly8=z9s;r*UM&pGtf2x3BayBi%O*F=t}1lCoYef*BC=H3YZXd=83^3u7+MXE*p zi9s!5lEhNrQSgUEL*l*wdBDS%0JD$zJO`?ajm2$B)`9$cD}IN5#>z=BB&-pwzZH`; z#$`;Vn7i;Y8BIIjN7G)27Vcu{dE&(ab(P_g@eUm`npTfrr#)a&%C}|;nG-3`csfuB z9F5KrGXv~ybZGD6IoR)@5kZ$iKWA|-l!D^)g&3^a-TdDpl_OK38b}a6_8zMmJCHnv zzep}wo6>a`+h?c_yf4-*Mm9fog>gl)RQ)Y*FZcu6qsi?7hd)Q3vrhB^EK<6V8&`4* zr^u(2BhsQ!)uXc?YvK?i@FxplnTLwo8Z~#iaX|_&Oj?r}gMC>2uo)|WBA?!5m7zlP zWnN{+xWVzMve;+7B%tA@agV~g__D#tFw;?R>>a0y>tE?rc@;(~!;sNT-;JP}Tp;?I z;g&H|3I=$Z(A8GeFsV&{CGcmWq$K7#I`uJ908fS`E}Sn0M7mF11*@Tjm#eLNL{W~w^Fe>GWcysM3K=9U*F4v}WNujWqDy47C2z<@ zvT`>G&b!E^=nDXf&>Oi8dLF?y z(>fQk9u}$__eMfN%s_Po(HKo#CElMC=M|N(u!|c^| zo82D#e@Y=`%%~ia$v1XTF;B`f6uK7vZLag&ZDQCwj68=P;$uR7%HxmAm=hXSEkF_1mb;EIfu(KEVAMWe!jjg!Zf z!IdK4xw}}bRNceD+HdCbrF7`*HI8eZMaZ7)kX#2wi`!Hmd|=nf*DaQICKf6SzabZi zDwR&*cF$b7*Lsg{<`XLhFoIo(!Q*IS@xx+KQSo!owNA^Omd8>-vIRzk{t?exU@N&( z_vAT*KXeNg%Gu&>Nv#O7uG1c%bHCj#+RW=g7WzwA>XovU&tYdtCq_f9_qd6kgZ#ce zL8G%?;{F6>o-FS<>_esds`epa{%^=OIkXeu=inL0Q)Q`1aDV1H%`HOekQ{b*;b-tP z_7lf2{p*(ljSxDzx*$*dvgDnD#rYd67{|-FC^#~AVV7oZXwk)`Bu1+-1`HagptVt8WGK^$ATmc7co$s;iVQ+k z7M=4#G+aBNAf>dNmQpyS<(%F)r#BC6kG+C{u?b51D}l`&{);{NJm2U0JkOiw#Z!BT zyDv6|9z&ziVl&cHGpV|h$_=Z-DNT->!D+N`+96JM8r5DK*nS7yci)ip6whzBl=M#g z1Vq_DoDKSNftcbb=sy~e9tV;!{wDv)K5Cq&E05okFKRh z*Cx`o_Uc zB2ikUBQ_~a;ecQ(1lu5$O%B@>Y8wO-aup#PCFG-oLQN<%#E_a$u3%Sc2ryO?)YJmx zm!P&D=x&F`suq#zMWkjCy}5)`hxE4q+5of-LH#{oxEmaQ7|=H^;r9dM&A`+GOl^y{ zrX^eRvZZPHdDF6^XMvC*C^~}JM^Fc>b*i-Fi2lW>j#TShY6Gd(yAUIZU@ioA5zh&` zjkFUJPP@Ztce$J-VsIly4~o0BxLb#Lw76G?d37d_)!`NB`yCrNw2p$fPVx83a_Jzk0zZlBBJb9wzPkKg58_QQU+ zcX9>aOONl>?BD+BIsf$hn>TM>FDx!CExmpF_JVLL^;-Y`*arVoLR}elE|Z%@OPL~0 zQJ&05-IIOk@kt_W6Yo>&&Ks=Y!uWJjicHhEuI9ZjcU!hq7x1Uoe3F=(RFRp4(n)wj z^9IIMru2kaz>ku(GZNO#CMP8~>N&xD^QCvAZe1U4SZ60!qsLy(2?l4}M1Fqod=-x_y-qvCFxT!_yC%)2u{%w(Gv|5jGncE`?8t$cAk6As6~^B5 zboZ7uxjwexx8#Z-OCXFa>mq%bW^Z0BP_c}(FgCS686{%#A5LkerrJK3j7>4dIObaJ zrpOEBJbHWOaP5aB=6G6$@06#?>urMHIbWHx_F`!Thoi~)Jwes*M?7ZR5f^iZWs6Qn zw5WD}bXg8B>SNUiDxhr^=9HhEkB*ru7oGL<@PX#oxcJFiyVmbH9Q|3w`(OO~HIqK? zA2Za!rXw9ke%<@}(X-Q|AMO3QJaTj5H*saXNzC%l0cdOS#@saZ)gLk=>c$L#dx1y2 dT1=U+ie{BgZ2Zy z98Y=^P;nGccN|xF99Vfhb5GXgD7c* zDQt);Y>6swj45-EEOL-7bdoG~kuG+XEqRnJdX_JFm@j>pFm8o9ZiPN)kw0jXGH{19 zaf&*2jXQXcFnyavV~9X$ltFxtLVJ-!d6HCZjaqk>P=2gpdzV*%Bwv9fV1guJge7E# zB4COnXo@6jjwES`Eog}~afvl}l|FKtLU^P`Fo2vzf|W&sm`R7AQ-H2kjiXkNq*jop zT#%!7hK_iLk932Ve2SfPlAU3arDBz-Y@4ocoUVVDp>UqDd!@C0q_%#jxnGjSW|_=v zp3!ij)px4hc&pxgui}GY9)x2czL7MCnR9`hd5EJ>k*H{zv~atWN29cQqrQ6Iu~g)> zSmwQH_QYK2!*%z`W%tf<_|bfahK7iRhlz=aiinDjjE#<(pPQSBnVFfNou8kdpMaR6 zj+~&7m!goKqm!e7oTQ1Iq?C%Rx{0p5iLkztp{A6grWI7Uti+49#+0?$Ma|)rR@mlkeB2 z@Y}BO-L?4OoA~9a`0KdD#KgnN%g)Zk$j;Kj(%8h)*vin;%+c4%*WAn4-pttE(9h7< z-^J3>)6mt~(c9kH+t}XN+R@wK(%s_I-{jll$=Kw}-{9ullqz=j!I`?&j?8>+j&}>+A08?(OaE=J4k3@$&HS=J509_W1Sq`0)Av`TP9* z{r&y_|Nk3QYybcN000000000000000000000000000000xg9`j00001bW%=J06^y0 zW&i*N%1J~)RCt{2*=tx7RTu|wLA-<__as(SM9>{jbajr1gS|A|P_nykL?^ zngWSJB`S*LB}MWAXet$;Qteh|q8KRaZA)`P%L*tXJ?+-ZuC=`Zcq9HJefRWKTUbYewu=?Z>JJ+yDLRBeO*V$_5byW6@tjs zPCeb$E|a#?sa+|eX6o1SGZWnJa%&&bI zg}nbKm`DOC!EQz}pjqtpT;0^vsRr(*rq!PE?Do9BWRlk&+m#}~?#O@euVfzNcgV6g zi3EyGQtV&NY2FAXLHH_Q)HLVbJLf@Q7u@IayC4M!y8!MG6@hU9#x8sylR|m+ zh8BT9(Xs&<2yzId`Mr$;M9Vw9>Fx`7?tYt2U~m3ekl(m0MA!@Y-NNF{7<=0vozdx# z!8UpJ!A-bZ(elngWF%bFOec*-(OI6}B+54=c6{AUlj%o1CezJpb@2#0{^~W!s;luB zd*v_Y=vrHKouifVY+7*zbt_t~pd#_2X165R=Y;v1#GY4IS6AO~xuN0W(FP`$FE`ZJ zgPn5`_S_4X>g(&_AtpyJg0hDCOP4Op!`K-=@zJ(+bhK*C!wdo&a|_f`i<&vlQ8vB| zzBA`55_{Y!Hv81-Q&`3!>~Z)ZwR)eZ2(qKT-~!dq&5xr82d;mdJxp^C@()=R#rM5XMe_qRYUjZ><%*9>=vm7 zCpojI#ocblm%&*sUlQ3xI}aZ|yg*&uu10dKs0d>h6&*tlw^yqdfLHA-!r4C#zrk1my}E;vpKg|Eo3+Ii(9}(mw{1XU_)ekr=+H(B?2`PlR6|IqnhmmEp1+xWy}u~|!GPna;lyYE=wHkqpU^rJ#3j19*9kOH6{+t(YsQoz=7 z(bPb8jfNk~v+vNM6-<^Y6ieByP{jRM-OkF&*6R&=a<|nKHGH6hW0lFyt~(6#m!br0 ziZUPTZf9qza&#CtoTAhMc6fLM6Q0eEBEkvX4y}j@R>dr?P#KM?ip4Ri;27YRBU#sN zeU2f=V8|hNTTP7!pa$DJR@n_?;^pPl$5(>w+XozBOYEu~?FR=0j1aM3=EAYV_^~`Y z?&RbxG`%IJLPgW6iWs;(`DC07$;xgU4B2{vA!{w^o7~oq3JMCKhIu&*qWA;^`78Y} zwx7};6!974;595DFffqv6R$U+lTffc% zTNwmH4e<@)0zeXMu$M3J9Rg+sL@8!Vo#f#fdA4dfOJ&*Y6fA#HhGb>8_3&mzPwuwO zP(}n=M+Ht}6BszsUpW+GgQAhs_<&N_>p-lCxqyX*Pl<%l)cg%nqhSUS;bHO@Fw5-6 z=(av93$AS<+lOOw8OcP*21V=vv{ah?3W%nLi3V;@A+wjU>zQG5>wFop+eRkDZZmAX zCAL!OFN)Gf$QG9<(ISo=5dq!KT)<|e1@@9fF~Pwx?5YOeX<&QN5|tbYqC^i*#n)}- zmOR@68@fgD@p*)>AITL7*^E0fQmbL2g{OD~ksYUc4Mqj8)puxafPIsjBU;qbQ)5)D z%gWK~v)8R5Jxl8W+)}aWfv~M8f@~M)=HMXA!UpItCl~qacAN@^y+Z+Rm`=4+w+U=+ zV%9QQ^E%gwj^?0!c6fiXFXcB3FxbbAF1`8hf1$$xBDiU2!9{^x;=$7PFSacbm#GeLh0ilt-| yd%G(|G=06li<3-T`lCMvb^TWnVk}P#oBsgS!EnF;anQv80000lb#>fGe#-{9uc-{jKW;?djS(c9k4*xt+7-pbe9(AC+}($mn- z(8|!$$j;Kl)7Zk&*uv7+z0ldV&DOfh(zM9Xz{ktM$jrmZ%f!sY%*@2h)Xdb}%-Pw? z)ZE0?*VNwF+T7&S?Cj+0>+9|9?e6RD?(y>M^z8KX?DqKe^!)Vu{QUg<{Qdp?=Irn0 z>+bmX*Z1$vgVweZ`n@7Jd8(U|$!llb79_~ohi)rR=deD}_B_sM1U#9ZdR zY3ajt?8}GbwOHS=RJ)W%zL7MHq*Q#QOnR0?bc{S~j67_NG;EA4WQ;6ige+WyEL?mf zRe2>;d>mAC987c^Ol%xXbR=ASM0jXRT3T9eY;JdTcZY_Ch=qrViHVAcijRzqnVFfN zou8kdpPZzWoTQALoQ#yDgoK=YiJ5niscf9IbfmO=q`Z8ryo{{GjI_j*w8WgOw49`@ zoTsUms;8)}tF5WCxv{&zy1~Z8#KgqJyu{SBoVLK4x5JpZ#+SIpm%7N7w#1gU!j-eW zk+8jsvA~J2zKO29imbYRsJVWmwtbWI7Ue6QkotKN62 z-Eg7RY@X3(nap33#Z!Q;P=2g2fuAsan=gHsEqRnIc9AS{kSTMID|C!2bBio>jVy4D zke8x#oHTTtEOeACY?Lg7V<3ZJ9&=V6=aR@U000KoNkltO}!(93hu(Eo8+}uHEGz_d%v|*yg3jsP6xIx!^E_ z{BZv#c?bc7OV2rqHHH@i8-~q|+McKd_v-Kwgk6_){NDiCdFiGTY+U}=DMAE7OWFu1 zV~8>$zPTLp5u%;vrnVw30R$qay98Q?DMC)3TWgyCc8!@xD|0qoFlV-%3M=mLpY^a- zM-7*EU5BM%N7zI-^{#`0Pen;SLKL>Jb%5AP;noX|ZsM~bi2Cg03<#?|fr`ugua4Bq z>n@tw7dKw}yXSjHwt*DsRXze>K0@l-ks4cQw;P?!SBh~6qOpxur>=$d>T?DC>lR;0 zS+q#kn5;8*Bnd%B-==OiY#AWE9`o9+S)-x$Yo;a0H&q!bh0V}QtEdepIKwWlKhNNf z#=_;!PTiu|@!&W>i#2SH@?jL*U>7BkCy_3kco-TNrO-~w%fYVJ@x6Egnt#>jaDlxy zI$`EJ8k>;!x;V9py8^~t^OJoC3)>?C#Y7^tYO`!0M)^3DQfy}n`)xe5${88xNT6w z=XyTb8}M&019Ll|OV@u`z8*c7eZ#CNxJd_EN(JS6MBf%pay#-z)L^S=lfS-rL4mCK@PaV9`$yPdKmioW=-}@H^qI{-okTX zn{@+{1KSut43?FStTA`4c)tww^zBay`6cThAp~=G(SzZOFP;})=U_E@nSC7`_U5zL!f-5v?G`bSat~R zGufk#m1?=`%MD*?#uMAX;Le3@zD;ARBnqyJ3E=C}U`c1&NUsJJmH&RiB3LA$cVGG) zwVvkEPC3yap0R9%P-g5)doK`Y*ce+DxGPu7iTgd!R_PPQgy)yVHY|*7iKIL!AlW$h z@wLc+zq1VPwOn4WLG(KC2>x}IcC$)2CA3w$G$*^1)%!}AR(^xFeD zE}0hq$9K3IxrAe{(sVLZskX)2#C6 zJC)}fX!7c}cUCUCORi)?O0z3satdTkEq}H}DV23|s?4-GDS=ckWfp+qW*bO~P)-i z2yr8O6F^$kJB_z8U9H4ONrW?rMXB9h#PWFmFmaG**d= zxno97LX_7ew8Bw1noe{Aya(=N`|nl3vmiZ)&=f!-Lshg6_w0jZ+NrZ|V2O_&GX#OS zMRGw2&wX2%nff4eH3MqL(6$8b(39iY`(wTz3RsXL28eh~@ow{?V^T zn|kLZN7&?H?@7m-f0B<76>IEvx-%PXoP5eSUR#@k5T_b{E+2yk=I}8nyU@S-F(|Ju lMbK6F-d8AvQYioX@()2Xz5Mt;{Ph3;002ovPDHLkV1hQaD0) DefineButton(159,y+1,16,16,id+BT_HIDE+BT_NOFRAME,0xE4DFE1); //кнопа для стрелки WriteText(165,y+5,0x80,0,arrow,0); //стрелка вниз @@ -134,15 +135,15 @@ void LeftPanelBackground() { int actions_y=disc_num*16; int start_y = show_actions*51+actions_y+108; - DrawBar(2,41,190,15,lpanel_col); //синий прямоугольник - над девайсами - DrawBar(17,actions_y+75,160,15,lpanel_col); //синий прямоугольник - под девайсами - DrawBar(2,56,15,actions_y+103,lpanel_col); //синий прямоугольник - слева - DrawBar(177,56,15,actions_y+103,lpanel_col); //синий прямоугольник - справа + DrawBar(2,41,190,15,col_lpanel); //синий прямоугольник - над девайсами + DrawBar(17,actions_y+75,160,15,col_lpanel); //синий прямоугольник - под девайсами + DrawBar(2,56,15,actions_y+103,col_lpanel); //синий прямоугольник - слева + DrawBar(177,56,15,actions_y+103,col_lpanel); //синий прямоугольник - справа if (onTop(start_y, 6) < 268) PutPaletteImage(#blue_hl, 190, onTop(start_y, 6), 2, start_y, #blue_hl_pal); else { - DrawBar(2,start_y,190,onTop(start_y,6+268),lpanel_col); + DrawBar(2,start_y,190,onTop(start_y,6+268),col_lpanel); PutPaletteImage(#blue_hl, 190, 268, 2, onTop(268,6), #blue_hl_pal); } } diff --git a/programs/fs/Eolite/trunk/include/some_code.h b/programs/fs/Eolite/trunk/include/some_code.h index ab864616ff..2f4a188e7d 100644 --- a/programs/fs/Eolite/trunk/include/some_code.h +++ b/programs/fs/Eolite/trunk/include/some_code.h @@ -25,14 +25,45 @@ dword ConvertSize(dword bytes) return #size_prefix; } + +dword col_palette[14] = {0xD2D3D3,0xD4D4D4,0xD6D5D6,0xD8D7D8,0xDAD8D9,0xDCDADB, +0xDFDCDD,0xE1DDDE,0xE2DEE0,0xE4DFE1,0xE3DFE1,0xE3DFE1,0xE3DFE1,0xE3DFE1,0xE3DFE1}; + inline fastcall void TVScroll() { //Прокрутка - dword on_y; - if (count<=0) {DrawFlatButton(onLeft(27,0),57,16,onTop(22,58),0,0xE4DFE1,""); return;} + dword on_y, i; + if (count<=0) {DrawFlatButton(onLeft(27,0),57,16,onTop(22,58),0,col_work,""); return;} on_y = za_kadrom * onTop(22,57) / count +57; scroll_size=onTop(22,57) * f_visible - f_visible / count; if (scroll_size<20) scroll_size = 20; //устанавливаем минимальный размер скролла if (scroll_size>onTop(22,57)-on_y+56) || (za_kadrom+f_visible>=count) on_y=onTop(23+scroll_size,0); //для большого списка - DrawFlatButton(onLeft(27,0),on_y,16,scroll_size,0,0xE4DFE1,"");//ползунок - DrawBar(onLeft(26,0),57,15,on_y-57,0xCED0D0);//поле до ползунка - DrawBar(onLeft(26,0),on_y+scroll_size+1,15,onTop(22,57)-scroll_size-on_y+56,0xCED0D0); //поле после ползунка + DrawFlatButton(onLeft(27,0),on_y,16,scroll_size,0,-1,"");//ползунок + if (!scroll_used) for (i=0; i<13; i++) DrawBar(onLeft(25-i,0), on_y+2, 1, scroll_size-3, col_palette[13-i]); + if (scroll_used) for (i=0; i<13; i++) DrawBar(onLeft(25-i,0), on_y+2, 1, scroll_size-3, col_palette[i]); + //поле до ползунка + if (on_y>58) DrawBar(onLeft(26,0),57,15,1, 0xC7C9C9); + DrawBar(onLeft(26,0),58,1, on_y-58,0xC7C9C9); + DrawBar(onLeft(25,0),58,14,on_y-58,0xCED0D0); + //поле после ползунка + if (onTop(22,57)-scroll_size+55>on_y) DrawBar(onLeft(26,0),on_y+scroll_size+1,15,1,0xC7C9C9); + DrawBar(onLeft(26,0),on_y+scroll_size+2,1,onTop(22,57)-scroll_size-on_y+55,0xC7C9C9); + DrawBar(onLeft(25,0),on_y+scroll_size+2,14,onTop(22,57)-scroll_size-on_y+55,0xCED0D0); +} + +void DrawFlatButton(dword x,y,width,height,id,color,text) +{ + int fill_h; + DrawRegion_3D(x,y,width,height,col_border,col_border); + DrawRegion_3D(x+1,y+1,width-2,height-2,0xFEFEFE,col_padding); + PutPixel(x+width-1, y+1, col_work); + DrawFilledBar(x+2, y+2, width-3, height-3); + IF (id<>0) DefineButton(x+1,y+1,width-2,height-2,id+BT_HIDE,0xEFEBEF); + WriteText(-strlen(text)*6+width/2+x+1,height/2-3+y,0x80,0,text,0); +} + +void DrawFilledBar(dword x, y, w, h) +{ + int i, fill_h; + if (h <= 14) fill_h = h; else fill_h = 14; + for (i=0; i8000) return; EAX = 13; EBX = x<<16+w; ECX = y<<16+h; @@ -276,15 +279,6 @@ void DrawRegion_3D(dword x,y,width,height,color1,color2) DrawBar(x,y+height,width,1,color2); } -void DrawFlatButton(dword x,y,width,height,id,color,text) -{ - DrawRegion_3D(x,y,width,height,0x94AECE,0x94AECE); - DrawRegion_3D(x+1,y+1,width-2,height-2,0xFFFFFF,0xC7C7C7); - DrawBar(x+2,y+2,width-3,height-3,color); - IF (id<>0) DefineButton(x+1,y+1,width-2,height-2,id+BT_HIDE,0xEFEBEF); - WriteText(-strlen(text)*6+width/2+x+1,height/2-3+y,0x80,0,text,0); -} - void PutPaletteImage(dword EBX,w,h,x,y, EDI) { EAX = 65;