Subversion Repositories Kolibri OS

Rev

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

  1. #define MAX_LINE_CHARS 256
  2.  
  3. #define CHBOX 12
  4. #define CHECKBOX_ID 50
  5. unsigned char checkbox[sizeof(file "img/checkbox.raw")]= FROM "img/checkbox.raw";
  6.  
  7. #define COL_BG_ACTIVE 0xFFF0A9
  8. #define COL_BG_INACTIVE 0xFFFFFF
  9.  
  10. //===================================================//
  11. //                                                   //
  12. //                       LINE                        //
  13. //                                                   //
  14. //===================================================//
  15.  
  16. struct NOTE_LINE
  17. {
  18.         bool state;
  19.         char data[MAX_LINE_CHARS];
  20.         void Delete();
  21. };
  22.  
  23. void NOTE_LINE::Delete()
  24. {
  25.         state=false;
  26.         data[0]=' ';
  27.         data[1]=NULL;
  28. }
  29.  
  30. //===================================================//
  31. //                                                   //
  32. //                       LIST                        //
  33. //                                                   //
  34. //===================================================//
  35.  
  36. struct NOTES : llist {
  37.         char txt_path[4096];
  38.         char txt_data[MAX_LINE_CHARS*LINES_COUNT];
  39.         bool txt_file_exists;
  40.  
  41.         NOTE_LINE lines[LINES_COUNT];
  42.  
  43.         char edit_active;
  44.         int OpenTxt();
  45.         int SaveTxt();
  46.         void DrawList();
  47.         dword DrawLine(int line_n, draw_h);
  48. } notes;
  49.  
  50.  
  51. int NOTES::OpenTxt(dword file_path)
  52. {
  53.         int i=0, linepos=0;
  54.         int item_n=-1;
  55.  
  56.         strcpy(#txt_path, file_path);
  57.         ReadFile(0, 4096, #txt_data, #txt_path);
  58.         if (!txt_data) || (strncmp(#txt_data, "notes", 5)!=0)
  59.         {
  60.                 txt_file_exists = false;
  61.                 notify("'Notes\nData file does not exists or is not valid' -tE");
  62.                 return 0;
  63.         }
  64.         else
  65.         {
  66.                 txt_file_exists = true;
  67.                 i+=5; //skip "notes" indefinier
  68.                 while (txt_data[i])
  69.                 {
  70.                         if (txt_data[i]=='\n') {
  71.                                 item_n++;
  72.                                 i+=2;
  73.                                 if (txt_data[i]=='-') lines[item_n].state=false; else lines[item_n].state=true;
  74.                                 i+=2;
  75.                                 linepos = 0;
  76.                                 continue;
  77.                         }
  78.                         if (linepos<MAX_LINE_CHARS) lines[item_n].data[linepos] = txt_data[i];
  79.                         linepos++;                             
  80.                         i++;
  81.                 }
  82.                 while (item_n < LINES_COUNT)
  83.                 {
  84.                         //lines[item_n].Delete();
  85.                         item_n++;
  86.                 }
  87.                 count = LINES_COUNT;
  88.                 return 1;
  89.         }
  90. }
  91.  
  92. int NOTES::SaveTxt()
  93. {
  94.         int i;
  95.         dword tm;
  96.         strcpy(#txt_data, "notes");
  97.         for (i=0; i<=count; i++)
  98.         {
  99.                 if (lines[i].state==false) strcat(#txt_data, "\n- "); else strcat(#txt_data, "\n+ ");
  100.                 tm = #lines[i].data;
  101.                 strcat(#txt_data, #lines[i].data);
  102.         }
  103.         if (!txt_file_exists) CreateFile(0, 0, #txt_path);
  104.         WriteFile(0, strlen(#txt_data), #txt_data, #txt_path);
  105. }
  106.  
  107. void NOTES::DrawList()
  108. {
  109.         int i;
  110.         for (i=0; i<visible; i++) DrawLine(i, item_h);
  111. }
  112.  
  113.  
  114. dword NOTES::DrawLine(int line_n, draw_h) {
  115.         dword
  116.                 COL_BOTTOM_LINE=0xE8EFF4,
  117.                 COL_BG,
  118.                 cur_text;
  119.         char line_text[4096];
  120.         if (line_n<0) return;
  121.         x = 1;
  122.         if (line_n==cur_y) COL_BG = COL_BG_ACTIVE; else COL_BG = COL_BG_INACTIVE;
  123.         DrawBar(x, line_n*item_h+y, RED_LINE_X, draw_h-1, COL_BG_INACTIVE);
  124.         DrawBar(x+RED_LINE_X+1, line_n*item_h+y, w-RED_LINE_X-1, draw_h-1, COL_BG);
  125.  
  126.         cur_text = #lines[line_n].data;
  127.  
  128.         if (draw_h!=item_h)
  129.         {
  130.                 COL_BOTTOM_LINE=COL_BG;
  131.         }
  132.         else
  133.         {
  134.                 DefineButton(RED_LINE_X-CHBOX/2+x, item_h*line_n+5+y, CHBOX-1,CHBOX-1, CHECKBOX_ID+line_n+BT_HIDE, 0); //checkbox
  135.                 _PutImage(RED_LINE_X-CHBOX/2+x, item_h*line_n+5+y, CHBOX,CHBOX, lines[line_n].state*CHBOX*CHBOX*3+#checkbox);
  136.                 if (cur_text) WriteText(x+RED_LINE_X+6, item_h*line_n+7+y, 0x80, lines[line_n].state*0x777777, cur_text);
  137.                 if (lines[line_n].state == true) DrawBar(x+RED_LINE_X+6, item_h*line_n+11+y, strlen(cur_text)*6, 1, 0x444444); //strike
  138.         }
  139.         DrawBar(x, line_n*item_h+draw_h-1+y, w, 1, COL_BOTTOM_LINE);
  140.         DrawBar(x+RED_LINE_X, line_n*item_h+y, 1, draw_h, COL_RED_LINE);
  141.         x = RED_LINE_X;
  142.         return cur_text;
  143. }
  144.