Subversion Repositories Kolibri OS

Rev

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