Subversion Repositories Kolibri OS

Rev

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

  1. //===================================================//
  2. //                                                   //
  3. //                       LIB                         //
  4. //                                                   //
  5. //===================================================//
  6.  
  7. #include "../lib/gui.h"
  8. #include "../lib/obj/box_lib.h"
  9. #include "../lib/obj/proc_lib.h"
  10. #include "../lib/patterns/simple_open_dialog.h"
  11.  
  12. //===================================================//
  13. //                                                   //
  14. //                       DATA                        //
  15. //                                                   //
  16. //===================================================//
  17.  
  18. //proc_info Form;
  19. #define WIN_W 450
  20.  
  21. char default_dir[] = "/rd/1";
  22. od_filter filter2 = {0,0};
  23.  
  24. char src_path[4096];
  25. char dst_path[4096];
  26. edit_box src_box = {WIN_W-36-DOT_W,18,30,0xffffff,0x94AECE,0xFFFfff,
  27.         0xffffff,0x10000000,sizeof(src_path)-2,#src_path,0, ed_focus};
  28. edit_box dst_box = {WIN_W-36-DOT_W,18,85,0xffffff,0x94AECE,0xFFFfff,
  29.         0xffffff,0x10000000,sizeof(dst_path)-2,#dst_path,0, 0b};
  30.  
  31. enum {
  32.         BID_EXIT_PRC=1,
  33.         BID_SRC_OPEN,
  34.         BID_DST_OPEN,
  35.         BID_GO
  36. };
  37.  
  38. #define T_FIRST "First file:"
  39. #define T_SECOND "Second file:"
  40. #define T_GO  " Compare "
  41.  
  42.  
  43. #define READY 0
  44. int state=READY;
  45.  
  46. //===================================================//
  47. //                                                   //
  48. //                       CODE                        //
  49. //                                                   //
  50. //===================================================//
  51.  
  52. void gui()
  53. {
  54.         #define NO_DLL_INIT
  55.         load_dll(boxlib, #box_lib_init,0);
  56.         load_dll(Proc_lib,  #OpenDialog_init,0);
  57.         OpenDialog_init stdcall (#o_dialog);
  58.         @SetEventMask(EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE + EVM_MOUSE_FILTER);
  59.  
  60.         loop() switch(@WaitEvent())
  61.         {
  62.                 case evMouse:
  63.                         if (READY == state) {
  64.                                 edit_box_mouse stdcall (#src_box);
  65.                                 edit_box_mouse stdcall (#dst_box);                             
  66.                         }
  67.                         break;
  68.  
  69.                 case evButton:
  70.                         @GetButtonID();
  71.                         if (EAX == BID_EXIT_PRC) ExitProcess();
  72.                         if (EAX == BID_SRC_OPEN) EventOpenDialogFirst();
  73.                         if (EAX == BID_DST_OPEN) EventOpenDialogSecond();
  74.                         if (EAX == BID_GO) EventGo();
  75.                         break;
  76.          
  77.                 case evKey:
  78.                         @GetKey();
  79.                         edit_box_key stdcall (#src_box);
  80.                         edit_box_key stdcall (#dst_box);
  81.                         EAX >>= 16;
  82.                         if (AL == SCAN_CODE_ESC) ExitProcess();
  83.                         if (AL == SCAN_CODE_TAB) EventTabClick();
  84.                         if (AL == SCAN_CODE_ENTER) EventGo();
  85.                         if (AL == SCAN_CODE_INS) EventInsert();
  86.                         break;
  87.                  
  88.                 case evReDraw:
  89.                         draw_window();
  90.                         break;
  91.         }
  92. }
  93.  
  94. void draw_window()
  95. {
  96.         sc.get();
  97.         DefineAndDrawWindow(215, 100, WIN_W+9, 170 + skin_height, 0x34, sc.work, #window_title,0);
  98.         //GetProcessInfo(#Form, SelfInfo);
  99.         if (READY==state) {
  100.                 DrawFileBox(#src_box, T_FIRST, BID_SRC_OPEN);
  101.                 DrawFileBox(#dst_box, T_SECOND, BID_DST_OPEN);
  102.                 DrawStandartCaptButton(dst_box.left - 2, dst_box.top + 40, BID_GO, T_GO);
  103.         }
  104. }
  105.  
  106. void UpdateEditBoxes(dword f1, f2)
  107. {
  108.         EditBox_UpdateText(#src_box, f1);
  109.         EditBox_UpdateText(#dst_box, f2);
  110.         edit_box_draw stdcall (#src_box);
  111.         edit_box_draw stdcall (#dst_box);
  112. }
  113.  
  114. //===================================================//
  115. //                                                   //
  116. //                     EVENTS                        //
  117. //                                                   //
  118. //===================================================//
  119.  
  120. void EventGo()
  121. {
  122.         char run_param[4096];
  123.         wsprintf(#run_param, "\"%s\" \"%s\"", #src_path, #dst_path);
  124.         RunProgram(I_Path, #run_param);
  125. }
  126.  
  127. void EventTabClick()
  128. {
  129.         if ( src_box.flags & ed_focus ) {
  130.                 UpdateEditBoxes(0, ed_focus);
  131.         } else {
  132.                 UpdateEditBoxes(ed_focus, 0);
  133.         }
  134. }
  135.  
  136. void EventOpenDialogFirst()
  137. {
  138.         o_dialog.type = 0; //0-file, 1-save, 2-select folder
  139.         OpenDialog_start stdcall (#o_dialog);
  140.         if (o_dialog.status) {
  141.                 strcpy(#src_path, #openfile_path);
  142.                 UpdateEditBoxes(ed_focus, 0);
  143.         }
  144. }
  145.  
  146. void EventOpenDialogSecond()
  147. {
  148.         OpenDialog_start stdcall (#o_dialog);
  149.         if (o_dialog.status) {
  150.                 strcpy(#dst_path, #openfile_path);
  151.                 UpdateEditBoxes(0, ed_focus);
  152.         }
  153. }
  154.  
  155. void EventInsert()
  156. {
  157.         if ( src_box.flags & ed_focus ) EventOpenDialogFirst();
  158.         if ( dst_box.flags & ed_focus ) EventOpenDialogSecond();
  159. }