Subversion Repositories Kolibri OS

Rev

Rev 7437 | 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.         count = LINES_COUNT;
  57.  
  58.         strcpy(#txt_path, file_path);
  59.         ReadFile(0, 4096, #txt_data, #txt_path);
  60.         if (!txt_data) || (strncmp(#txt_data, "notes", 5)!=0)
  61.         {
  62.                 txt_file_exists = false;
  63.                 return 0;
  64.         }
  65.         else
  66.         {
  67.                 txt_file_exists = true;
  68.                 i+=5; //skip "notes" indefinier
  69.                 while (txt_data[i])
  70.                 {
  71.                         if (txt_data[i]=='\n') {
  72.                                 item_n++;
  73.                                 i+=2;
  74.                                 if (txt_data[i]=='-') lines[item_n].state=false; else lines[item_n].state=true;
  75.                                 i+=2;
  76.                                 linepos = 0;
  77.                                 continue;
  78.                         }
  79.                         if (linepos<MAX_LINE_CHARS) lines[item_n].data[linepos] = txt_data[i];
  80.                         linepos++;                             
  81.                         i++;
  82.                 }
  83.                 while (item_n < LINES_COUNT)
  84.                 {
  85.                         //lines[item_n].Delete();
  86.                         item_n++;
  87.                 }
  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.         int drawy;
  120.         char line_text[4096];
  121.         if (line_n<0) return;
  122.         x = 1;
  123.         if (line_n==cur_y) COL_BG = COL_BG_ACTIVE; else COL_BG = COL_BG_INACTIVE;
  124.         DrawBar(x, line_n*item_h+y, RED_LINE_X, draw_h-1, COL_BG_INACTIVE);
  125.         DrawBar(x+RED_LINE_X+1, line_n*item_h+y, w-RED_LINE_X-1, draw_h-1, COL_BG);
  126.  
  127.         cur_text = #lines[line_n].data;
  128.  
  129.         if (draw_h!=item_h)
  130.         {
  131.                 COL_BOTTOM_LINE=COL_BG;
  132.         }
  133.         else
  134.         {
  135.                 drawy = item_h*line_n+5+y;
  136.                 DefineButton(RED_LINE_X-CHBOX/2+x, drawy, CHBOX-1,CHBOX-1, CHECKBOX_ID+line_n+BT_HIDE, 0); //checkbox
  137.                 _PutImage(RED_LINE_X-CHBOX/2+x,drawy, CHBOX,CHBOX, lines[line_n].state*CHBOX*CHBOX*3+#checkbox);
  138.                 if (cur_text) WriteText(x+RED_LINE_X+6, drawy+2, 0x80, lines[line_n].state*0x777777, cur_text);
  139.                 if (lines[line_n].state == true) DrawBar(x+RED_LINE_X+6, drawy+6, strlen(cur_text)*6, 1, 0x444444); //strike
  140.                 DrawBar(WIN_W,drawy,1,item_h,0xBBBBBB); //fast fix; proper fix is to restrict WriteText() char length
  141.         }
  142.         DrawBar(x, line_n*item_h+draw_h-1+y, w, 1, COL_BOTTOM_LINE);
  143.         DrawBar(x+RED_LINE_X, line_n*item_h+y, 1, draw_h, COL_RED_LINE);
  144.         x = RED_LINE_X;
  145.         return cur_text;
  146. }
  147.