Subversion Repositories Kolibri OS

Rev

Rev 4043 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. //Leency 2013
  2.  
  3. llist app_list;
  4. struct app_list_string { char item[1024]; char icon; };
  5. app_list_string app_paths[100];
  6.  
  7. int GetListOfPrograms()
  8. {
  9.         byte section[32], parametr[32], option[256], InfType=0;
  10.         char bukva[2];
  11.         int tj, ti;
  12.         static dword buff, fsize;
  13.  
  14.         debug("GetListOfPrograms()");
  15.  
  16.         free(buff);
  17.         if (!GetFile(#buff, #fsize, abspath("Eolite.ini")))
  18.         {
  19.                 notify("Eolite.ini not found. Don't know any programm.");
  20.                 return -1;
  21.         }
  22.  
  23.         for (tj=0; tj<fsize; tj++;)
  24.         {  
  25.                 bukva = ESBYTE[buff+tj];
  26.                 switch (bukva)
  27.                 {
  28.                         case ';': InfType=COMMENT; break;                              
  29.                         case '[': InfType=SECTION; section=NULL; break;
  30.                         case ']': InfType=PARAM; break;
  31.                         case '=': InfType=OPTION; break;
  32.                         case 0x0a:
  33.                         case 0x0d:
  34.                                 InfType=PARAM;                         
  35.                                 if (!strcmp(#section,"Associations")) && (option)
  36.                                 {
  37.                                         for (ti=0; ti<app_list.count; ti++) //do not add duplications
  38.                                         {
  39.                                                 if (strcmp(#app_paths[ti].item, #option)==0) GOTO _OUT;
  40.                                         }
  41.                                         // for (i=0; ext[i]!=0; i+=2;) if (!strcmp(extension, ext[i])) { icon_n = ext[i+1]; break;      }
  42.                                         strcpy(#app_paths[app_list.count].item, #option);
  43.                                         app_list.count++;
  44.                                 }
  45.                                 _OUT:
  46.                                 parametr=option=NULL;
  47.                                 break;
  48.                         default:
  49.                                 IF (InfType==SECTION) chrcat(#section, bukva);
  50.                                 IF (InfType==PARAM) chrcat(#parametr, bukva);
  51.                                 IF (InfType==OPTION) chrcat(#option, bukva);
  52.                 }
  53.         }
  54. }
  55.  
  56.  
  57.  
  58. void OpenWith()
  59. {
  60.         #define WIN_W 290
  61.         #define OPEN_LIST_VISIBLE_N 12
  62.         #define OPEN_LIST_LINE_H 20
  63.         #define PANEL_H 40
  64.         #define PADDING 8;
  65.         int WIN_H;
  66.         mouse mm;
  67.         word key, slot;
  68.         proc_info MenuForm;
  69.  
  70.         app_list.ClearList();
  71.         app_list.SetSizes(PADDING,PANEL_H+1,WIN_W-PADDING-PADDING,OPEN_LIST_VISIBLE_N*OPEN_LIST_LINE_H,150,OPEN_LIST_LINE_H);
  72.         if (!app_list.count) if (GetListOfPrograms()==-1) return;
  73.         SetEventMask(100111b);
  74.         goto _APP_LIST_DRAW;
  75.  
  76.         loop() switch(WaitEvent())
  77.         {
  78.                 case evMouse:
  79.                                 slot = GetProcessSlot(MenuForm.ID);
  80.                                 if (slot != GetActiveProcess()) ExitProcess();
  81.                                 mm.get();
  82.                                 //if (mm.lkm) ExitProcess();
  83.                                 if (mm.vert)
  84.                                 {
  85.                                         app_list.MouseScroll(mm.vert);
  86.                                         DrawAppList();
  87.                                 }
  88.                                 if (mm.x>app_list.x) && (mm.x<app_list.x+app_list.w) && (mm.y>app_list.y) && (mm.y<app_list.y+app_list.h)
  89.                                 {
  90.                                         app_list.current_temp = mm.y - app_list.y / app_list.line_h + app_list.first;
  91.                                         if (app_list.current_temp != app_list.current)
  92.                                         {
  93.                                                 app_list.current = app_list.current_temp;
  94.                                                 DrawAppList();
  95.                                         }
  96.                                 }
  97.  
  98.                                 break;
  99.                                
  100.                 case evKey:
  101.                                 key = GetKey();
  102.                                 if (key==27) ExitProcess();
  103.                                 break;
  104.  
  105.                 case evButton:
  106.                                 RunProgram(#app_paths[GetButtonID()-10].item, #file_path);
  107.                                 ExitProcess();
  108.                                 break;
  109.                                
  110.                 case evReDraw: _APP_LIST_DRAW:
  111.                                 WIN_H = app_list.h+PANEL_H+PADDING+2;
  112.                                 DefineAndDrawWindow(files.w-WIN_W/2+files.x+Form.left+6,
  113.                                 files.h-WIN_H/2+files.y+Form.top+GetSkinHeight(),WIN_W+1,WIN_H,0x01, 0, 0, 0x01fffFFF);
  114.                                 GetProcessInfo(#MenuForm, SelfInfo);
  115.                                 DrawPopup(0,0,MenuForm.width-2,MenuForm.height-2,0, col_work, col_border);
  116.                                 DrawRectangle(app_list.x-1, app_list.y-2, app_list.w+1, app_list.h+2, col_border);
  117.  
  118.                                 Put_icon(#file_name+_strrchr(#file_name,'.'), 10, 13, col_work);
  119.                                 WriteText(35,10, 0x80, 0, T_SELECT_APP_TO_OPEN_WITH);
  120.                                 WriteText(35,23, 0x80, 0, #file_name);
  121.  
  122.                                 DrawAppList();
  123.         }
  124. }
  125.  
  126. void DrawAppList()
  127. {
  128.         dword index, col_bg;
  129.         for (index = 0; (index<app_list.visible) && (index+app_list.first<app_list.count); index++)
  130.         {
  131.                 DefineButton(app_list.x, index*app_list.line_h+app_list.y, app_list.w, app_list.line_h-1, index+app_list.first+10+BT_HIDE+BT_NOFRAME, 0);
  132.                 if (index+app_list.first==app_list.current) col_bg = col_selec; else col_bg = 0xFFFfff;
  133.                 DrawBar(app_list.x, index*app_list.line_h+app_list.y, app_list.w, app_list.line_h, col_bg);
  134.                 Put_icon("kex", app_list.x+4, index*app_list.line_h+app_list.y+2, col_bg);
  135.                 WriteText(app_list.x+23, index*app_list.line_h+app_list.y+7, 0x80, 0, #app_paths[index+app_list.first].item);
  136.         }
  137. }