Subversion Repositories Kolibri OS

Rev

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

  1. //11.03.12 - start!
  2.  
  3. #ifndef AUTOBUILD
  4.         ?include "lang.h--"
  5. #endif
  6.  
  7. #define MEMSIZE 0xFE800
  8. #include "..\lib\kolibri.h"
  9. #include "..\lib\mem.h"
  10. #include "..\lib\strings.h"
  11. #include "..\lib\dll.h"
  12. #include "..\lib\file_system.h"
  13. #include "..\lib\list_box.h"
  14. #include "..\lib\gui.h"
  15. #include "..\lib\obj\box_lib.h"
  16.  
  17. #ifdef LANG_RUS
  18.         ?define WINDOW_HEADER "Усправление темой"
  19.         ?define T_SKINS       "   Тема окон"
  20.         ?define T_WALLPAPERS  "   Обои рабочего стола"
  21. #else
  22.         ?define WINDOW_HEADER "Appearance"
  23.         ?define T_SKINS       "   Skins"
  24.         ?define T_WALLPAPERS  "   Wallpappers"
  25. #endif
  26.  
  27. unsigned char icons[]= FROM "icons.raw";
  28.  
  29.  
  30. #define PANEL_H 30
  31. #define SKINS_STANDART_PATH "/kolibrios/res/skins"
  32. #define WALP_STANDART_PATH "/kolibrios/res/wallpapers"
  33.  
  34. llist list[2];
  35. int active;
  36. enum { WALLPAPERS, SKINS };
  37.  
  38. char folder_path[4096];
  39. char cur_file_path[4096];
  40. char temp_filename[4096];
  41. int files_mas[100];
  42. dword buf;
  43.  
  44. int cur;
  45.  
  46. system_colors sc;
  47. proc_info Form;
  48.  
  49. scroll_bar scroll1 = { 18,200,398, 44,18,0,115,15,0,0xeeeeee,0xD2CED0,0x555555,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1};
  50.  
  51. #include "other.h"
  52.  
  53. //icons configurate, delete from list, delete from disk, make default
  54. //remember current
  55.  
  56. void Open_Dir()
  57. {
  58.         int j, filesnum;
  59.  
  60.         list[active].count = 0;
  61.         free(buf);
  62.         if (GetDir(#buf, #filesnum, #folder_path, DIRS_ONLYREAL)!=0) return;
  63.  
  64.         for (j=0; j<filesnum; j++)
  65.         {
  66.                 strcpy(#temp_filename, j*304 + buf+72);
  67.                 strlwr(#temp_filename);
  68.                 if (active==SKINS) if (strcmpi(#temp_filename+strlen(#temp_filename)-4,".skn")!=0) continue;
  69.                 if (active==WALLPAPERS) if (strcmpi(#temp_filename+strlen(#temp_filename)-4,".txt")==0) continue;
  70.                 cur = list[active].count;
  71.                 files_mas[cur]=j;
  72.                 if (!strcmpi("default.skn",#temp_filename)) files_mas[0]><files_mas[list[active].count];
  73.                 list[active].count++;
  74.         }
  75.         Sort_by_Name(0, list[active].count-1);
  76. }
  77.  
  78. void Draw_List()
  79. {
  80.         int i;
  81.         int yyy;
  82.         list[SKINS].SetSizes(0, PANEL_H, Form.cwidth-scroll1.size_x-1, Form.cheight-PANEL_H, 40, 20);
  83.         list[WALLPAPERS].SetSizes(0, PANEL_H, Form.cwidth-scroll1.size_x-1, Form.cheight-PANEL_H, 40, 20);
  84.        
  85.         for (i=0; i<list[active].visible; i++;)
  86.         {
  87.                 cur = list[active].first;
  88.                 strcpy(#temp_filename, files_mas[i+cur]*304 + buf+72);
  89.                 temp_filename[strlen(#temp_filename)-4] = 0;
  90.                 yyy = i*list[active].line_h+list[active].y;
  91.                
  92.                 if (list[active].current-list[active].first==i)
  93.                 {
  94.                         if (sc.work_button<>sc.work)
  95.                         {
  96.                                 DrawBar(0, yyy, list[active].w, list[active].line_h, sc.work_button);
  97.                                 WriteText(12,yyy+list[active].text_y,0x80,sc.work_button_text, #temp_filename);
  98.                         }
  99.                         else
  100.                         {
  101.                                 DrawBar(0, yyy, list[active].w, list[active].line_h, sc.grab_button);
  102.                                 WriteText(12,yyy+list[active].text_y,0x80,sc.grab_button_text, #temp_filename);
  103.                         }
  104.                 }
  105.                 else
  106.                 {
  107.                         DrawBar(0,yyy,list[active].w, list[active].line_h, 0xFFFfff);
  108.                         WriteText(12,yyy+list[active].text_y,0x80,0, #temp_filename);
  109.                 }
  110.         }
  111.         DrawBar(0,list[active].visible*list[active].line_h+list[active].y, list[active].w, -list[active].visible*list[active].line_h+ list[active].h, 0xFFFfff);
  112.         DrawScroller();
  113. }
  114.  
  115. void GetFiles()
  116. {
  117.         if (list[SKINS].active)
  118.         {
  119.                 strcpy(#folder_path, SKINS_STANDART_PATH);
  120.                 Open_Dir();
  121.                 if (!list[active].count) notify("'No skins were found' -E");
  122.         }
  123.         if (list[WALLPAPERS].active)
  124.         {
  125.                 strcpy(#folder_path, WALP_STANDART_PATH);
  126.                 Open_Dir();
  127.                 if (!list[active].count) notify("'No wallpapers were found' -E");
  128.         }
  129. }
  130.  
  131. void Apply()
  132. {
  133.         if (list[SKINS].active)
  134.         {
  135.                 strcpy(#cur_file_path, #folder_path);
  136.                 cur = list[SKINS].current;
  137.                 chrcat(#cur_file_path, '/');
  138.                 strcat(#cur_file_path, files_mas[cur]*304 + buf+72);
  139.                 SetSystemSkin(#cur_file_path);
  140.                 //Draw_List();
  141.         }
  142.         if (list[WALLPAPERS].active)
  143.         {
  144.                 strcpy(#cur_file_path, "\\S__");
  145.                 strcat(#cur_file_path, #folder_path);
  146.                 cur = list[WALLPAPERS].current;
  147.                 chrcat(#cur_file_path, '/');
  148.                 strcat(#cur_file_path, files_mas[cur]*304 + buf+72);
  149.                 RunProgram("/sys/media/kiv", #cur_file_path);
  150.                 Draw_List();
  151.         }
  152. }
  153.  
  154. OpenFile()
  155. {
  156.         if (list[SKINS].active) RunProgram("/sys/desktop", #cur_file_path);
  157.         if (list[WALLPAPERS].active) RunProgram("/sys/media/kiv", #cur_file_path);
  158. }
  159.  
  160.  
  161. void main()
  162. {  
  163.         int id, key, mouse_clicked;
  164.         mouse mm;
  165.  
  166.         mem_Init();
  167.         SetEventMask(0x27);
  168.         if (load_dll2(boxlib, #box_lib_init,0)!=0) notify("'Fatal Error: library doesn't exists /rd/1/lib/box_obj' -E");
  169.         list[SKINS].current = list[WALLPAPERS].current = -1;
  170.         list[SKINS].first = list[WALLPAPERS].first = 0;
  171.         TabClick(WALLPAPERS);
  172.         list[WALLPAPERS].SetSizes(0, 230, 350, 400-PANEL_H, 40, 18);
  173.         list[SKINS].SetSizes(0, 230, 350, 400-PANEL_H, 40, 18);
  174.         loop()
  175.         {
  176.           switch(WaitEvent())
  177.           {
  178.                 case evMouse:
  179.                         if (!CheckActiveProcess(Form.ID)) break;
  180.                         scrollbar_v_mouse (#scroll1);
  181.                         if (list[active].first <> scroll1.position)
  182.                         {
  183.                                 list[active].first = scroll1.position;
  184.                                 Draw_List();
  185.                                 break;
  186.                         }
  187.                
  188.                         mm.get();
  189.  
  190.                         if (mm.vert)
  191.                         {
  192.                                 if (list[SKINS].active) && (list[SKINS].MouseScroll(mm.vert)) Draw_List();
  193.                                 if (list[WALLPAPERS].active) && (list[WALLPAPERS].MouseScroll(mm.vert)) Draw_List();
  194.                         }
  195.  
  196.                         if (mouse_clicked)
  197.                         {
  198.                                 if (!mm.lkm) && (list[SKINS].active) && (list[SKINS].ProcessMouse(mm.x, mm.y)) Apply();
  199.                                 if (!mm.lkm) && (list[WALLPAPERS].active) && (list[WALLPAPERS].ProcessMouse(mm.x, mm.y)) Apply();
  200.                                 mouse_clicked=0;
  201.                         }
  202.                         if (mm.lkm) && (list[SKINS].MouseOver(mm.x, mm.y)) mouse_clicked=1;
  203.                         break;
  204.  
  205.  
  206.                 case evButton:
  207.                         id=GetButtonID();
  208.                         if (id==1) ExitProcess();
  209.                         if (id==2) TabClick(WALLPAPERS);
  210.                         if (id==3) TabClick(SKINS);
  211.                         break;
  212.          
  213.                 case evKey:
  214.                         key = GetKey();
  215.                         if (list[SKINS].active) && (list[SKINS].ProcessKey(key)) Apply();
  216.                         if (list[WALLPAPERS].active) && (list[WALLPAPERS].ProcessKey(key)) Apply();
  217.                         IF (key==013) OpenFile();
  218.                         if (key==9) if (list[SKINS].active) TabClick(WALLPAPERS); else TabClick(SKINS);
  219.                         IF (key==182) //Del
  220.                         {
  221.                                 DeleteFile(#cur_file_path);
  222.                                 Open_Dir();
  223.                                 Apply();
  224.                         }
  225.                         break;
  226.                  
  227.                  case evReDraw:
  228.                         sc.get();                      
  229.                         DefineAndDrawWindow(30,80,list[active].w+9,list[active].h+4+GetSkinHeight(),0x73,0xE4DFE1,WINDOW_HEADER,0);
  230.                         GetProcessInfo(#Form, SelfInfo);
  231.                         IF (Form.status_window>=2) break;
  232.                         DrawTabs();
  233.                         Draw_List();
  234.           }
  235.    }
  236. }
  237.  
  238. #define BT_PADDING 16
  239.  
  240. void DrawTab(dword x,y, but_id, is_active, text)
  241. {
  242.         dword col_bg, col_text;
  243.         dword w=strlen(text)*6+BT_PADDING, h=21;
  244.  
  245.         if (is_active)
  246.         {
  247.                 col_bg=sc.work_button;
  248.                 col_text=sc.work_button_text;
  249.         }
  250.         else
  251.         {
  252.                 col_bg=sc.work;
  253.                 col_text=sc.work_text;
  254.         }
  255.         DrawRectangle(x,y, w,h, sc.work_graph);
  256.         DrawCaptButton(x+1,y+1, w-2,h-1, but_id, col_bg, col_text, text);
  257.         _PutImage(x+6,y+4,  16,15,   but_id-2*16*15*3+#icons);
  258. }
  259.  
  260.  
  261. void DrawTabs()
  262. {
  263.         DrawBar(0,0, Form.cwidth, PANEL_H-1, sc.work);
  264.  
  265.         DrawTab(10,7, 2, list[WALLPAPERS].active, T_WALLPAPERS);
  266.         DrawTab(strlen(T_WALLPAPERS)*6+BT_PADDING+21,7, 3, list[SKINS].active, T_SKINS);
  267.  
  268.         DrawBar(0,PANEL_H-2, Form.cwidth, 1, sc.work_graph);
  269.         DrawBar(0,PANEL_H-1, Form.cwidth, 1, 0xEEEeee);
  270. }
  271.  
  272. void TabClick(int N)
  273. {
  274.         if (N==SKINS)
  275.         {
  276.                 list[SKINS].active = 1;
  277.                 list[WALLPAPERS].active = 0;   
  278.         }
  279.         if (N==WALLPAPERS)
  280.         {
  281.                 list[SKINS].active = 0;
  282.                 list[WALLPAPERS].active = 1;   
  283.         }
  284.         active = N;
  285.         GetFiles();
  286.         DrawTabs();
  287.         Draw_List();
  288. }
  289.  
  290.  
  291. void DrawScroller()
  292. {
  293.         scroll1.bckg_col = 0xBBBbbb;
  294.         scroll1.frnt_col = sc.work;
  295.         scroll1.line_col = sc.work_graph;
  296.  
  297.         scroll1.max_area = list[active].count;
  298.         scroll1.cur_area = list[active].visible;
  299.         scroll1.position = list[active].first;
  300.  
  301.         scroll1.all_redraw=1;
  302.         scroll1.start_x = list[active].x + list[active].w;
  303.         scroll1.start_y = list[active].y-2;
  304.         scroll1.size_y = list[active].h+2;
  305.  
  306.         scrollbar_v_draw(#scroll1);
  307. }
  308.  
  309.  
  310. stop:
  311.