Subversion Repositories Kolibri OS

Rev

Rev 5506 | Rev 5626 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /////////////////////////////////////////////////////////////////////////////////////////
  2. /////////////////////////                   GUI                      ////////////////////
  3. /////////////////////////////////////////////////////////////////////////////////////////
  4.  
  5. #include "..\lib\gui.h"
  6. #include "..\lib\obj\box_lib.h"
  7.  
  8. #ifdef LANG_RUS
  9.         unsigned char *but_text[]={
  10.         "„®¡ ¢¨âì ¤¨áª [Ins]",
  11.         "“¤ «¨âì ¤¨áª [Del]",
  12.         "„®¡ ¢¨âì [Ctrl+Enter]",
  13.         0};
  14.        
  15.         ?define INTRO_TEXT_1 "‡¤¥áì ¡ã¤¥â ®â®¡à ¦ âìáï ᯨ᮪"
  16.         ?define INTRO_TEXT_2 "¢¨àâã «ì­ëå ¤¨áª®¢ ¢ á¨á⥬¥."
  17.         ?define INTRO_TEXT_3 "®¯à®¡ã©â¥ ¤®¡ ¢¨âì ®¤¨­..."
  18.         ?define INTRO_TEXT_4 " §¬¥à:"
  19.  
  20.         ?define NOTIFY_TEXT_NO_DISK    "'„«ï ­ ç «  ¤®¡ ¢ì⥠å®âï ¡ë ®¤¨­ ¤¨áª' -W"
  21.         ?define NOTIFY_TEXT_DISK_LIMIT "'„®á⨣­ã⠯।¥« ª®«¨ç¥á⢠ ¢¨àâã «ì­ëå ¤¨áª®¢' -W"
  22.         ?define FREE_RAM_TEXT " §¬¥à ᢮¡®¤­®© ®¯¥à â¨¢­®© ¯ ¬ïâ¨: "
  23.        
  24. #else
  25.         unsigned char *but_text[]={
  26.         "Add disk [Ins]",
  27.         "Delete disk [Del]",
  28.         "Add [Ctrl+Enter]",
  29.         0};
  30.        
  31.         ?define INTRO_TEXT_1 " There will be list of mounted"
  32.         ?define INTRO_TEXT_2 " virtual disks."
  33.         ?define INTRO_TEXT_3 " Try to add one..."
  34.         ?define INTRO_TEXT_4 "Size:"
  35.  
  36.         ?define NOTIFY_TEXT_NO_DISK    "'You need to have at least one disk' -W"
  37.         ?define NOTIFY_TEXT_DISK_LIMIT "'Reached the limit of the number of virtual disks' -W"
  38.         ?define FREE_RAM_TEXT "Free RAM size: "
  39. #endif
  40.  
  41. struct path_string { unsigned char Item[10]; };
  42. path_string disk_list[10];
  43.  
  44. dword devbuf;
  45. char disk_num;
  46. char selected;
  47.  
  48. system_colors sc;
  49. proc_info Form;
  50.  
  51. unsigned char icons[] = FROM "icons.raw";
  52. #define TOPPANELH 50
  53. #define BOTPANELH 20
  54.  
  55. int     mouse_dd;
  56. char new_disk_size[5];
  57. edit_box edit_disk_size= {50,0,5,0xffffff,0x94AECE,0x000000,0xffffff,0,4,#new_disk_size,#mouse_dd, 1000000000000010b};
  58.  
  59. void Main_Window()
  60. {
  61.         word id, key, err;
  62.         int i, x;
  63.        
  64.         mem_Init();
  65.         if (load_dll2(boxlib, #box_lib_init,0)!=0) notify(BOX_LIB_LOAD_ERR);
  66.         GetSizeDisk();
  67.         edit_disk_size.left = strlen(INTRO_TEXT_4)*6 + 10;
  68.         SetEventMask(0x27);
  69.         loop()
  70.         {
  71.                 switch(WaitEvent())
  72.                 {
  73.                 case evMouse:
  74.                         if (!CheckActiveProcess(Form.ID)) break;
  75.                         edit_box_mouse stdcall (#edit_disk_size);
  76.                         break;
  77.                        
  78.                 case evButton:
  79.                         id=GetButtonID();              
  80.                         if (id==1) return;
  81.                         if (id==10) AddDisk();
  82.                         if (id==11) DelDisk();
  83.                         if (id>=20)
  84.                         {
  85.                                 if (selected==id-20) OpenTmpDisk();
  86.                                 selected=id-20;
  87.                                 DrawTmpDisks();
  88.                         }
  89.             break;
  90.         case evKey:
  91.                         key = GetKey();
  92.                         if (TestBit(edit_disk_size.flags,2))
  93.                         {
  94.                                 if (key==185) AddDisk();
  95.                                 if (key==13)
  96.                                 {
  97.                                         edit_disk_size.flags=1000000000000000b;
  98.                                         edit_box_draw stdcall (#edit_disk_size);
  99.                                 }
  100.                                 EAX=key<<8;
  101.                                 edit_box_key stdcall(#edit_disk_size);
  102.                                 break;
  103.                         }
  104.                         switch(key)
  105.                         {
  106.                                 case 9:
  107.                                         if ( !asm test edit_disk_size.flags, 2) edit_disk_size.flags=1000000000000010b;
  108.                                         else edit_disk_size.flags=1000000000000000b;
  109.                                         edit_box_draw stdcall (#edit_disk_size);
  110.                                         break;
  111.                                 case 185:
  112.                                         AddDisk();
  113.                                         break;
  114.                                 case 182:
  115.                                         if (disk_num<>0) DelDisk();
  116.                                         break;
  117.                                 case 13:
  118.                                         OpenTmpDisk();
  119.                                         break;
  120.                                 case 178:
  121.                                         if (selected==0) break;
  122.                                         selected--;
  123.                                         DrawTmpDisks();
  124.                                         break;
  125.                                 case 177:
  126.                                         if (selected+2>disk_num) break;
  127.                                         selected++;
  128.                                         DrawTmpDisks();
  129.                                         break;
  130.                                 case 176:
  131.                                         if (selected<3) break;
  132.                                         selected-=3;
  133.                                         DrawTmpDisks();
  134.                                         break;
  135.                                 case 179:
  136.                                         if (selected+4>disk_num) break;
  137.                                         selected+=3;
  138.                                         DrawTmpDisks();
  139.                                         break;
  140.                         }
  141.                         break;
  142.          case evReDraw:                
  143.                         sc.get();
  144.                         DefineAndDrawWindow(170,150,314,270,0x74,sc.work,"Virtual Disk Manager 0.6",0);
  145.                         GetProcessInfo(#Form, SelfInfo);
  146.                         if (Form.status_window>2) break;
  147.  
  148.                         DrawBar(0,0,  Form.cwidth,TOPPANELH, sc.work);
  149.                         DrawBar(0,TOPPANELH, Form.cwidth,1,  sc.work_graph);
  150.                         WriteText(6, 9, 0x80, sc.work_text, INTRO_TEXT_4);
  151.                         WriteText(edit_disk_size.left + edit_disk_size.width + 8, 9, 0x80, sc.work_text, "MB.");
  152.                         edit_box_draw stdcall (#edit_disk_size);
  153.                         for (i=0, x=6; i<2; i++, x+=strlen(but_text[i])*6+37)
  154.                         {
  155.                                 DefineButton(x,25, strlen(but_text[i])*6+28,19, 10+i, sc.work_button);
  156.                                 _PutImage(x+3,28,  14,14,   i*14*14*3+#icons);
  157.                                 WriteText(x+22,31, 0x80, sc.work_button_text, but_text[i]);
  158.                         }              
  159.                         GetDisks();
  160.                         DrawTmpDisks();
  161.                 }
  162.         }
  163. }
  164.  
  165.  
  166. void GetSizeDisk()
  167. {
  168.         int fr;
  169.         fr = GetFreeRAM() / 5;
  170.         fr = itoa(fr / 2048);
  171.         strcpy(#new_disk_size, fr);
  172.         edit_disk_size.size = edit_disk_size.pos = strlen(#new_disk_size);
  173.         edit_box_draw stdcall (#edit_disk_size);
  174. }
  175.  
  176.  
  177. void OpenTmpDisk()
  178. {
  179.         unsigned char eol_param[10];
  180.         if (!disk_num) return;
  181.         strcpy(#eol_param, "/tmp#/1/");
  182.         eol_param[4] = disk_list[selected].Item[3];
  183.         RunProgram("/sys/File managers/Eolite", #eol_param);
  184. }
  185.  
  186.  
  187. void GetDisks()
  188. {
  189.         unsigned int j, fcount=30;
  190.         unsigned char disk_name[10];
  191.        
  192.         mem_Free(devbuf);
  193.         devbuf= mem_Alloc(32);
  194.         ReadDir(0, devbuf, "/");
  195.         fcount=ESDWORD[devbuf+8];
  196.         mem_Free(devbuf);
  197.         devbuf = mem_Alloc(fcount+1*304+32);
  198.         ReadDir(fcount, devbuf, "/");
  199.        
  200.         disk_num=0;
  201.         for (j=0; j<fcount; j++;)
  202.         {
  203.                 strcpy(#disk_name, j*304+devbuf+72);
  204.                 if (disk_name[0]!='t') continue;
  205.                 strcpy(#disk_list[disk_num].Item, #disk_name);
  206.                 disk_num++;
  207.         }
  208.         if (disk_num>12) disk_num=12;
  209. }
  210.  
  211.  
  212. unsigned int disk_pos_x[]={13,13,13,85,85,85,157,157,157,229,229,229};
  213. unsigned int disk_pos_y[]={60,95,130, 60, 95, 130, 60, 95,130, 60, 85,130};
  214.  
  215. void DrawTmpDisks()
  216. {
  217.         char free_ram_text[60];
  218.         byte i, real_id;
  219.         int FreeRAM=GetFreeRAM()/1024;
  220.  
  221.         DrawBar(0,51, Form.cwidth,Form.cheight-TOPPANELH-BOTPANELH-2, 0xFFFFFF);
  222.         DrawBar(0,Form.cheight-BOTPANELH-1, Form.cwidth,1, sc.work_graph);
  223.         DrawBar(0,Form.cheight-BOTPANELH, Form.cwidth,BOTPANELH, sc.work);
  224.         strcpy(#free_ram_text, FREE_RAM_TEXT);
  225.         strcat(#free_ram_text, itoa(FreeRAM));
  226.         strcat(#free_ram_text, " MB");
  227.         WriteText(10, Form.cheight-13, 0x80, sc.work_text, #free_ram_text);
  228.         if (disk_num==0)
  229.         {
  230.                 WriteText(17,65,    0x90, 0x777777, INTRO_TEXT_1);
  231.                 WriteText(17,65+15, 0x90, 0x777777, INTRO_TEXT_2);
  232.                 WriteText(17,65+42, 0x90, 0x777777, INTRO_TEXT_3);
  233.                 return;
  234.         };
  235.         if (selected>=disk_num) selected=disk_num-1; //restore selected
  236.         for (i=0; i<10; i++) DeleteButton(20+i);
  237.         for (i=0; i<disk_num; i++)
  238.         {
  239.                 DefineButton(disk_pos_x[i], disk_pos_y[i], 65, 30, 20+i, 0xFFFfff);
  240.                 WriteText(disk_pos_x[i]+25,disk_pos_y[i]+6,  0x90, 0, #disk_list[i].Item);
  241.                 real_id = disk_list[i].Item[3] - '0';
  242.                 WriteText(disk_pos_x[i]+25,disk_pos_y[i]+19, 0x80, 0x888888, ConvertSize(disk_sizes[real_id]));
  243.                 _PutImage(disk_pos_x[i]+5,disk_pos_y[i]+4, 14,14, 2*14*14*3+#icons);
  244.                 if (selected==i) DrawRectangle(disk_pos_x[i], disk_pos_y[i], 65-1, 30-1, 0x00459A);
  245.         }
  246. }
  247.  
  248.  
  249. void AddDisk()
  250. {
  251.         byte i, j, err;
  252.         if (disk_num>=10)
  253.         {
  254.                 notify(NOTIFY_TEXT_DISK_LIMIT);
  255.                 return;
  256.         }
  257.        
  258.         param[0]='a';
  259.         for (i=0; i<9; i++)
  260.         {
  261.                 for (j=0; j<=disk_num; j++)
  262.                 {
  263.                         if (i+48==disk_list[j].Item[3]) continue 1;
  264.                 }
  265.                 break;
  266.         }
  267.        
  268.         param[1]=i+48;
  269.         param[2]='s';
  270.         param[3]='\0';
  271.         strcat(#param, #new_disk_size);
  272.         err = Console_Work();
  273.         if ((err!=0) && (err<7)) notify(rezult_text[err]);
  274.         pause(5);
  275.         GetDisks();
  276.         DrawTmpDisks();
  277.         GetSizeDisk();
  278. }
  279.  
  280.  
  281. void DelDisk()
  282. {
  283.         byte err;
  284.         if (disk_num==0)
  285.         {
  286.                 notify(NOTIFY_TEXT_NO_DISK);
  287.                 return;
  288.         }
  289.         param[0]='d';
  290.         param[1]=disk_list[selected].Item[3];
  291.         err = byte Console_Work();
  292.         if ((err!=0) && (err<7)) notify(rezult_text[err]);
  293.         pause(15);
  294.         GetDisks();
  295.         DrawTmpDisks();
  296. }
  297.  
  298.  
  299.  
  300.  
  301.  
  302.