Subversion Repositories Kolibri OS

Rev

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

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