Subversion Repositories Kolibri OS

Rev

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

  1. #define MEMSIZE 1024 * 50
  2. #include "../lib/kolibri.h"
  3. #include "../lib/strings.h"
  4. #include "../lib/mem.h"
  5. #include "../lib/gui.h"
  6.  
  7. #include "../lib/obj/libimg.h"
  8. #include "../lib/obj/box_lib.h"
  9. #include "../lib/obj/proc_lib.h"
  10.  
  11. #ifndef AUTOBUILD
  12.         #include "lang.h--"
  13. #endif
  14.  
  15. /* === TRANSLATIONS === */
  16.  
  17. #define T_WTITLE "EasyShot v1.1"
  18.  
  19. #ifdef LANG_RUS
  20.         ?define T_TAKE_SCREENSHOT "  ‘¤¥« âì áªà¨­è®â"
  21.         ?define T_SETTINGS " áâனª¨"
  22.         ?define T_EDITBOX_FRAME " ãâì á®åà ­¥­¨ï áªà¨­è®â  "
  23.         ?define T_CONTINUOUS_SHOOTING "Continuous shooting"
  24.         ?define T_DELAY "‡ ¤¥à¦ª  ¢ ᥪ㭤 å"
  25.         ?define T_NO_DIR "' ¯ª  ­¥ áãé¥áâ¢ã¥â!' -E"
  26.         ?define T_SET_PATH "‡ ¤ âì"
  27. #else
  28.         ?define T_TAKE_SCREENSHOT "  Take a screenshot"
  29.         ?define T_SETTINGS "Settings"
  30.         ?define T_EDITBOX_FRAME " Save path "
  31.         ?define T_CONTINUOUS_SHOOTING "Continuous shooting"
  32.         ?define T_DELAY "Delay in seconds"
  33.         ?define T_NO_DIR "'Directory does not exists!' -E"
  34.         ?define T_SET_PATH "Set"
  35. #endif
  36.  
  37. /* === DATA === */     
  38.  
  39. proc_info Form;
  40. proc_info Settings;
  41.  
  42. dword screenshot;
  43. int screenshot_length;
  44.  
  45. enum {
  46.         BTN_MAKE_SCREENSHOT=10,
  47.         BTN_SETTINGS
  48. };
  49.  
  50. #define PD 18 //padding
  51.  
  52. char save_path[4096];
  53. char save_path_stable[4096];
  54. char open_dir[4096];
  55.  
  56. edit_box edit_save = {250,25,100,0xffffff,0x94AECE,0xFFFfff,0xffffff,
  57.         0x10000000,sizeof(save_path)-2,#save_path,0, 0b};
  58.  
  59. more_less_box delay = { 1, 0, 64, T_DELAY };
  60. checkbox continuous_shooting = { T_CONTINUOUS_SHOOTING, true };
  61.  
  62.  
  63. opendialog open_folder_dialog =
  64. {
  65.   2, //0-file, 2-save, 3-select folder
  66.   #Settings,
  67.   #communication_area_name,
  68.   0,
  69.   0, //dword opendir_path,
  70.   #open_dir, //dword dir_default_path,
  71.   #open_dialog_path,
  72.   #DrawSettingsWindow,
  73.   0,
  74.   #open_dir, //dword openfile_path,
  75.   0, //dword filename_area,
  76.   0, //dword filter_area,
  77.   420,
  78.   NULL,
  79.   320,
  80.   NULL
  81. };
  82.  
  83. /* === CODE === */
  84.  
  85. void main()
  86. {      
  87.         int id;
  88.  
  89.         load_dll(libio,  #libio_init,  1);
  90.         load_dll(libimg, #libimg_init, 1);
  91.         load_dll(boxlib, #box_lib_init,0);
  92.         load_dll(Proc_lib,  #OpenDialog_init,0);
  93.         OpenDialog_init stdcall (#open_folder_dialog);
  94.  
  95.         system.color.get();
  96.         Libimg_LoadImage(#skin, "/sys/icons16.png");
  97.         Libimg_ReplaceColor(skin.image, skin.w, skin.h, 0xffFFFfff, system.color.work_button);
  98.         Libimg_ReplaceColor(skin.image, skin.w, skin.h, 0xffCACBD6, MixColors(system.color.work_button, 0, 200));
  99.         screenshot_length = screen.width * screen.height * 3;
  100.         screenshot = malloc(screenshot_length);
  101.  
  102.         strcpy(#save_path_stable, "/tmp0/1");
  103.         strcpy(#save_path, #save_path_stable);
  104.         edit_save.size = strlen(#save_path);
  105.  
  106.         loop() switch(WaitEvent())
  107.         {
  108.         case evButton:
  109.                 id = GetButtonID();
  110.                 if (id == CLOSE_BTN) ExitProcess();
  111.                 if (id == BTN_MAKE_SCREENSHOT) EventTakeScreenshot();
  112.                 if (id == BTN_SETTINGS) CreateThread(#SettingsWindow,#settings_stak+4092);
  113.                 break;
  114.  
  115.         case evKey:
  116.                 GetKeys();
  117.                 if (SCAN_CODE_ENTER == key_scancode) EventTakeScreenshot();
  118.                 break;
  119.      
  120.         case evReDraw:
  121.                 DefineAndDrawWindow(screen.width/4, screen.height-100/3, 270,
  122.                         skin_height + 27+PD+PD, 0x34, system.color.work, T_WTITLE,0);
  123.                 GetProcessInfo(#Form, SelfInfo);
  124.                 DrawMainContent();
  125.         }
  126. }
  127.  
  128. void DrawMainContent()
  129. {
  130.         int take_scr_btn_width;
  131.         take_scr_btn_width = DrawIconButton(PD, PD, BTN_MAKE_SCREENSHOT, T_TAKE_SCREENSHOT, 45);
  132.         DrawIconButton(PD+take_scr_btn_width, PD, BTN_SETTINGS, " ", 10);      
  133. }
  134.  
  135. void EventTakeScreenshot() {
  136.         MinimizeWindow();
  137.         pause(delay.value*100);
  138.         CopyScreen(screenshot, 0, 0, screen.width, screen.height);
  139.         ActivateWindow(GetProcessSlot(Form.ID));
  140.         EventSaveImageFile();
  141. }
  142.  
  143. void EventSaveImageFile()
  144. {
  145.         int i=0;
  146.         char save_file_name[4096];
  147.         do {
  148.                 i++;
  149.                 //sprintf(, "%s/screen_%i.png", #save_path_stable, i);
  150.                 strcpy(#save_file_name, #save_path_stable);
  151.                 strcat(#save_file_name, "/screen_");
  152.                 strcat(#save_file_name, itoa(i));
  153.                 strcat(#save_file_name, ".png");
  154.         } while (file_exists(#save_file_name));
  155.         save_image(screenshot, screen.width, screen.height, #save_file_name);
  156. }
  157.  
  158.  
  159. void SettingsWindow()
  160. {
  161.         #define BTN_OD 10
  162.         #define BTN_SET 11
  163.         int id, butw;
  164.         SetEventMask(EVM_REDRAW+EVM_KEY+EVM_BUTTON+EVM_MOUSE+EVM_MOUSE_FILTER);
  165.         loop() switch(WaitEvent())
  166.         {
  167.         case evMouse:
  168.                 edit_box_mouse stdcall (#edit_save);
  169.                 break;
  170.  
  171.         case evKey:
  172.                 GetKeys();
  173.                 if (SCAN_CODE_ESC == key_scancode) ExitProcess();
  174.                 EAX = key_editbox;
  175.                 edit_box_key stdcall (#edit_save);     
  176.                 break;
  177.  
  178.         case evButton:
  179.                 id = GetButtonID();
  180.                 if (CLOSE_BTN == id) ExitProcess();
  181.                 if (BTN_OD == id) {
  182.                         OpenDialog_start stdcall (#open_folder_dialog);
  183.                         if (open_folder_dialog.status) {
  184.                                 strcpy(#save_path, open_folder_dialog.opendir_path);
  185.                                 edit_save.size = edit_save.pos = edit_save.shift
  186.                                         = edit_save.shift_old = strlen(#save_path);
  187.                         }
  188.                 }
  189.                 if (BTN_SET == id) {
  190.                         if (save_path[0]) && (dir_exists(#save_path)) {
  191.                                 strcpy(#save_path_stable, #save_path);
  192.                                 strrtrim(#save_path_stable);
  193.                                 if (save_path_stable[strlen(#save_path_stable)-1]=='/')
  194.                                     save_path_stable[strlen(#save_path_stable)-1]=NULL; //no "/" at the end
  195.                         }
  196.                         else notify(T_NO_DIR);
  197.  
  198.                 }
  199.                 delay.click(id);
  200.                 break;
  201.  
  202.         case evReDraw:
  203.                 DrawSettingsWindow();
  204.         }
  205. }
  206.  
  207. void DrawSettingsWindow()
  208. {
  209.         DefineAndDrawWindow(Form.left+100, Form.top-40, 400, 230, 0x34, system.color.work, T_SETTINGS, 0);
  210.         GetProcessInfo(#Settings, SelfInfo);
  211.         delay.draw(15, 30);
  212.         DrawFrame(15, 85, 360, 95, T_EDITBOX_FRAME);
  213.                 DrawEditBoxPos(32, 110, #edit_save);
  214.                 DrawStandartCaptButton(edit_save.left + edit_save.width + 15, edit_save.top-3, BTN_OD, "...");
  215.                 DrawStandartCaptButton(edit_save.left, edit_save.top+32, BTN_SET, T_SET_PATH); 
  216. }
  217.  
  218. int DrawIconButton(dword x, y, id, text, icon)
  219. {
  220.         int btwidth;
  221.         btwidth = DrawStandartCaptButton(x, y, id, text);
  222.         img_draw stdcall(skin.image, x+12, y+5, 16, 16, 0, icon*16);
  223.         return btwidth;
  224. }
  225.  
  226. stop:
  227.  
  228. char settings_stak[4096];