Advertisement
Guest User

Untitled

a guest
Dec 3rd, 2016
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.48 KB | None | 0 0
  1. Translated to Cxx ... code :
  2. -------------- types.hxx -------------
  3. #pragma once
  4. #include <functional>
  5. #include "../EXCEPTION/decls.hxx"
  6. #include "../Bean/decls.hxx"
  7. #include "../BeansRendererAbstract.hxx"
  8. -------------- decls.hxx -------------
  9. #pragma once
  10. #include "types.hxx"
  11. size_t beans_render_abstract(ARRAY<Bean> const & elements,int scroll_x,int scroll_y,int view_port_w,int view_port_h,int & out_all_width,int & out_all_height,std::function<void(char const* symbol)> draw_utf8_complex_symbol,std::function<void(ARRAY<char> const & str,int from_incl,int to_excl,bool selected)> draw_ascii_string,std::function<void()> draw_new_line,std::function<bool(size_t y,size_t x,bool par_in_sel,size_t bean_i)> try_sel_line,ARRAY<size_t> const & sel_par_path);
  12.  
  13. -------------- src.cxx ------------
  14. #include "decls.hxx"
  15. size_t beans_render_abstract(ARRAY<Bean> const & elements,int scroll_x,int scroll_y,int view_port_w,int view_port_h,int & out_all_width,int & out_all_height,std::function<void(char const* symbol)> draw_utf8_complex_symbol,std::function<void(ARRAY<char> const & str,int from_incl,int to_excl,bool selected)> draw_ascii_string,std::function<void()> draw_new_line,std::function<bool(size_t y,size_t x,bool par_in_sel,size_t bean_i)> try_sel_line,ARRAY<size_t> const & sel_par_path)
  16. {
  17.    int selected_line(-1);
  18.    int ts_render_pos_x(0);
  19.    int ts_render_pos_y(0);
  20.    int frame_width(0);
  21.    int draw_ts__from_x_inc((-scroll_x));
  22.    int draw_ts__from_y_inc((-scroll_y));
  23.    int draw_ts__to_x_exc(((-scroll_x)+view_port_w));
  24.    int draw_ts__to_y_exc(((-scroll_y)+view_port_h));
  25.    ARRAY<int> indents_array;
  26.    ARRAY<size_t> drw_pars;
  27.    auto safe_set_indent([&](size_t i,int val)->void
  28.       {
  29.          if((i==length(indents_array)))
  30.          {
  31.             push_mut(indents_array,val);
  32.          }
  33.          else
  34.          {
  35.             ((indents_array[i])=val);
  36.          }
  37.       });
  38.    enum class CanShortIndent { Yes, No, };
  39.    auto render_utf8_symbol([&](char const* str)->void
  40.       {
  41.          if(((ts_render_pos_y>=draw_ts__from_y_inc)&&(ts_render_pos_y<draw_ts__to_y_exc)&&((ts_render_pos_x+1)>draw_ts__from_x_inc)&&(ts_render_pos_x<draw_ts__to_x_exc)))
  42.          {
  43.             draw_utf8_complex_symbol(str);
  44.          }
  45.          (++ts_render_pos_x);
  46.       });
  47.    std::function<void(ARRAY<Bean> const & bean,CanShortIndent shor_indent)> render_children;
  48.    auto render_bean([&](Bean const & bean,size_t current_bean_i)->void
  49.       {
  50.          int str_len(length((bean.str)));
  51.          for(signed long long i=0; i!=str_len; i+=((signed long long)(str_len-0))>0?1:-1)
  52.          {
  53.             safe_set_indent((ts_render_pos_x+i),0);
  54.          }
  55.          bool const parent_in_sel(arrays_equals(sel_par_path,drw_pars));
  56.          bool const in_sel(try_sel_line(ts_render_pos_y,ts_render_pos_x,parent_in_sel,current_bean_i));
  57.          if(((ts_render_pos_y>=draw_ts__from_y_inc)&&(ts_render_pos_y<draw_ts__to_y_exc)&&((ts_render_pos_x+str_len)>draw_ts__from_x_inc)&&(ts_render_pos_x<draw_ts__to_x_exc)))
  58.          {
  59.             int const cut_from(std::max(0,(draw_ts__from_x_inc-ts_render_pos_x)));
  60.             int const cut_to(std::min(str_len,(draw_ts__to_x_exc-ts_render_pos_x)));
  61.             draw_ascii_string((bean.str),cut_from,cut_to,in_sel);
  62.          }
  63.          size_t const children_count(length((bean.children)));
  64.          if((!children_count))
  65.          {
  66.             if(((ts_render_pos_y>=draw_ts__from_y_inc)&&(ts_render_pos_y<draw_ts__to_y_exc)))
  67.             {
  68.                (frame_width=std::max(frame_width,ts_render_pos_x));
  69.                draw_new_line();
  70.             }
  71.             (ts_render_pos_x=0);
  72.             (++ts_render_pos_y);
  73.          }
  74.          safe_set_indent(ts_render_pos_x,children_count);
  75.          (drw_pars<<current_bean_i);
  76.          render_children((bean.children),CanShortIndent::Yes);
  77.          pop(drw_pars);
  78.       });
  79.    (render_children=[&](ARRAY<Bean> const & children,CanShortIndent can_short_indent_arg)->void
  80.       {
  81.          size_t these_children_indent(0);
  82.          bool can_short_indent((can_short_indent_arg==CanShortIndent::Yes));
  83.          size_t const children_count(length(children));
  84.          for(signed long long child_i=0; child_i!=children_count; child_i+=((signed long long)(children_count-0))>0?1:-1)
  85.          {
  86.             Bean const & child((children[child_i]));
  87.             if(can_short_indent)
  88.             {
  89.                bool is_last((child_i==(children_count-1)));
  90.                (--(indents_array[ts_render_pos_x]));
  91.                render_utf8_symbol((is_last?symbol_light_horizontal:symbol_light_down_and_horizontal));
  92.                (can_short_indent=false);
  93.                (these_children_indent=ts_render_pos_x);
  94.             }
  95.             else
  96.             {
  97.                if(these_children_indent)
  98.                {
  99.                   for(signed long long char_ind=0; char_ind!=(these_children_indent-1); char_ind+=((signed long long)((these_children_indent-1)-0))>0?1:-1)
  100.                   {
  101.                      render_utf8_symbol(((indents_array[char_ind])?symbol_light_vertical:" "));
  102.                   }
  103.                   render_utf8_symbol(((!(--(indents_array[(these_children_indent-1)])))?symbol_light_up_and_right:symbol_light_vertical_and_right));
  104.                }
  105.             }
  106.             render_bean(child,child_i);
  107.          }
  108.       });
  109.    render_children(elements,CanShortIndent::No);
  110.    (out_all_width=frame_width);
  111.    (out_all_height=ts_render_pos_y);
  112.    return selected_line;
  113. }
  114. ----------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement