Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Translated to Cxx ... code :
- -------------- types.hxx -------------
- #pragma once
- #include <functional>
- #include "../EXCEPTION/decls.hxx"
- #include "../Bean/decls.hxx"
- #include "../BeansRendererAbstract.hxx"
- -------------- decls.hxx -------------
- #pragma once
- #include "types.hxx"
- 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);
- -------------- src.cxx ------------
- #include "decls.hxx"
- 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)
- {
- int selected_line(-1);
- int ts_render_pos_x(0);
- int ts_render_pos_y(0);
- int frame_width(0);
- int draw_ts__from_x_inc((-scroll_x));
- int draw_ts__from_y_inc((-scroll_y));
- int draw_ts__to_x_exc(((-scroll_x)+view_port_w));
- int draw_ts__to_y_exc(((-scroll_y)+view_port_h));
- ARRAY<int> indents_array;
- ARRAY<size_t> drw_pars;
- auto safe_set_indent([&](size_t i,int val)->void
- {
- if((i==length(indents_array)))
- {
- push_mut(indents_array,val);
- }
- else
- {
- ((indents_array[i])=val);
- }
- });
- enum class CanShortIndent { Yes, No, };
- auto render_utf8_symbol([&](char const* str)->void
- {
- 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)))
- {
- draw_utf8_complex_symbol(str);
- }
- (++ts_render_pos_x);
- });
- std::function<void(ARRAY<Bean> const & bean,CanShortIndent shor_indent)> render_children;
- auto render_bean([&](Bean const & bean,size_t current_bean_i)->void
- {
- int str_len(length((bean.str)));
- for(signed long long i=0; i!=str_len; i+=((signed long long)(str_len-0))>0?1:-1)
- {
- safe_set_indent((ts_render_pos_x+i),0);
- }
- bool const parent_in_sel(arrays_equals(sel_par_path,drw_pars));
- bool const in_sel(try_sel_line(ts_render_pos_y,ts_render_pos_x,parent_in_sel,current_bean_i));
- 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)))
- {
- int const cut_from(std::max(0,(draw_ts__from_x_inc-ts_render_pos_x)));
- int const cut_to(std::min(str_len,(draw_ts__to_x_exc-ts_render_pos_x)));
- draw_ascii_string((bean.str),cut_from,cut_to,in_sel);
- }
- size_t const children_count(length((bean.children)));
- if((!children_count))
- {
- if(((ts_render_pos_y>=draw_ts__from_y_inc)&&(ts_render_pos_y<draw_ts__to_y_exc)))
- {
- (frame_width=std::max(frame_width,ts_render_pos_x));
- draw_new_line();
- }
- (ts_render_pos_x=0);
- (++ts_render_pos_y);
- }
- safe_set_indent(ts_render_pos_x,children_count);
- (drw_pars<<current_bean_i);
- render_children((bean.children),CanShortIndent::Yes);
- pop(drw_pars);
- });
- (render_children=[&](ARRAY<Bean> const & children,CanShortIndent can_short_indent_arg)->void
- {
- size_t these_children_indent(0);
- bool can_short_indent((can_short_indent_arg==CanShortIndent::Yes));
- size_t const children_count(length(children));
- for(signed long long child_i=0; child_i!=children_count; child_i+=((signed long long)(children_count-0))>0?1:-1)
- {
- Bean const & child((children[child_i]));
- if(can_short_indent)
- {
- bool is_last((child_i==(children_count-1)));
- (--(indents_array[ts_render_pos_x]));
- render_utf8_symbol((is_last?symbol_light_horizontal:symbol_light_down_and_horizontal));
- (can_short_indent=false);
- (these_children_indent=ts_render_pos_x);
- }
- else
- {
- if(these_children_indent)
- {
- 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)
- {
- render_utf8_symbol(((indents_array[char_ind])?symbol_light_vertical:" "));
- }
- render_utf8_symbol(((!(--(indents_array[(these_children_indent-1)])))?symbol_light_up_and_right:symbol_light_vertical_and_right));
- }
- }
- render_bean(child,child_i);
- }
- });
- render_children(elements,CanShortIndent::No);
- (out_all_width=frame_width);
- (out_all_height=ts_render_pos_y);
- return selected_line;
- }
- ----------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement