GTK3 рдореЗрдВ рдХреИрд░реЛ рдХреЗ рд╕рд╛рде рдПрдХ рдЧреНрд░рд╛рдл рдЦреАрдВрдЪрдирд╛

рдЫрд╡рд┐

рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдлреНрд▓реЛрдЯ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд╛рд░реНрдЯ рдХреЗ рдкреНрд░рджрд░реНрд╢рди, рдЦрд┐рдВрдЪрд╛рд╡, рд╕реНрдХреНрд░реЙрд▓ рдХрд╛ рдЖрдпреЛрдЬрди рдХрд░рддрд╛ рд╣реИред

рд▓реЗрдЦрди рд╢реИрд▓реА рд╕реА рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╣реИ (gtkmm рдХреЗ рдмрд┐рдирд╛)ред рдпрд╣ рд╕рд╣реА рдирд╣реАрдВ рдирд┐рдХрд▓рд╛, рдмрд╣рддреЗ рдЧрд░реНрднрдкрд╛рдд рдХреЗ рд╕рд╛рдеред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдХреЛ рдХрдо рдХрд░рддреЗ рд╣реИрдВ, рдЪрд░ рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред
рдореВрд▓ рд░реВрдк рд╕реЗ, рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдХреНрд▓рд╛рд╕ рдХреЗ рдмрд╛рдХреА рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЧреНрд░рд╛рдлрд╝рд┐рдХ_рдкреИрд░реЗрдЯрд░реНрд╕ рдХрд╣рд╛ рд╣реИред GTK рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рдЬреЗрдЯ рдХреЗ рдЕрдкрдиреЗ рд╕рдВрдХреЗрдд рд╣реЛрддреЗ рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, GtkEventBox рдореЗрдВ рдПрдХ "рдмрдЯрди-рдкреНрд░реЗрд╕-рдИрд╡реЗрдВрдЯ" рд╕рд┐рдЧреНрдирд▓ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рдЬреЗрдЯ рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП "рдХреЙрдиреНрдлрд╝рд┐рдЧрд░-рдИрд╡реЗрдВрдЯ" рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ GtkEventBox рд╣рдореЗрд╢рд╛ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЖрдХрд╛рд░ рд▓реЗрддрд╛ рд╣реИред рдФрд░ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЖрдХрд╛рд░ рд╣рд╛рде рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЖрдк GtkFrame рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

cairo_surface_t  *surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
cairo_t  *cr = cairo_create(surface);

Cairo_t рдореЗрдВ, рд▓рд╛рдЗрдиреЗрдВ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВ, рдЬреЛ cairo_stroke рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВред рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ cairo_stroke рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрдерд╛рд╕рдВрднрд╡ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░
cairo_move_to, cairo_line_to рдЬреИрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХрд╛рдлреА рдЫреЛрдЯрд╛ рд╣реИред Cairo_stroke рдХреЗ рдмрд╛рдж, cairo_t рдХреА рд╕рд╛рдордЧреНрд░реА рд╕рд╛рдлрд╝ рд╣реЛ рдЬрд╛рддреА рд╣реИ рдФрд░ рдлрд┐рд░ рд╕реЗ cairo_stroke (cr) рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдХреБрдЫ рднреА рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЖрдк
рд╕рд╛рдордЧреНрд░реА рдФрд░ cairo_save / cairo_restore рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП cairo_stroke_preserve рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ , рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ред

рдпрджрд┐ рдЖрдпрд╛рдореЛрдВ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдорд╛рдЙрд╕ рдХреЗ рд╕рд╛рде рдЦреАрдВрдЪрдХрд░, config_event_cb рд╕рд┐рдЧреНрдирд▓), рддреЛ рдкреНрд░рддреНрдпреЗрдХ рдбреНрд░рд╛рдЗрдВрдЧ рдХреЗ рд▓рд┐рдП cairo_surface_t рдФрд░ cairo_t рдХреЛ рд╣рдЯрд╛рдирд╛ рдФрд░ рдкреБрди: рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрджрд┐ рдЖрдк рд╢реЗрдбреНрдпреВрд▓ рдХреЛ рд░рд┐рд╡рд╛рдЗрдВрдб рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ

    cairo_set_source_rgb(cr,0.8,0.8,0.8);
    cairo_paint(cr);

рдЕрдЧрд▓рд╛, cairo_surface_t рдПрдХ рдЫрд╡рд┐ рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рд╣реИ

void gtk_image_set_from_surface (GtkImage *image, cairo_surface_t *surface);

рдЗрд╕ рдЫрд╡рд┐ рдХреЛ рддрдм рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ

eventbox=gtk_event_box_new();
    g_signal_connect(eventbox,"button-press-event", G_CALLBACK(eventbox_press_cb), this);
    GtkAdjustment *adj_h=gtk_adjustment_new(0,0,100,1,5,10);
    GtkAdjustment *adj_v=gtk_adjustment_new(0,0,100,1,5,10);
    GtkWidget *viewport=gtk_viewport_new(adj_h, adj_v);
    scrolledwindow=gtk_scrolled_window_new(adj_h, adj_v);
    g_object_set(scrolledwindow, "hscrollbar-policy", GTK_POLICY_EXTERNAL, "vscrollbar-policy", GTK_POLICY_EXTERNAL, NULL);
    gtk_container_add(GTK_CONTAINER(viewport), scrolledwindow);
    gtk_widget_set_events(scrolledwindow, GDK_SCROLL_MASK); 
    g_signal_connect(scrolledwindow,"scroll-event",G_CALLBACK(eventbox_scroll_cb), this);
    GtkWidget *box=gtk_box_new(GTK_ORIENTATION_VERTICAL,0);
    adj=gtk_adjustment_new(0,0,110,1,5,10);
    g_signal_connect(adj,"value-changed", G_CALLBACK(adj_changed_cb), this);
    scrollbar=gtk_scrollbar_new(GTK_ORIENTATION_HORIZONTAL,adj);
    gtk_box_pack_end(GTK_BOX(box),scrollbar, FALSE,FALSE,0);
    image_from_surface=gtk_image_new_from_surface(surface);
    gtk_container_add(GTK_CONTAINER(scrolledwindow),image_from_surface);
    gtk_box_pack_start(GTK_BOX(box),viewport, TRUE,TRUE,0);
    gtk_container_add(GTK_CONTAINER(eventbox),box);

рдореИрдВрдиреЗ рдЙрдкрд╕рд░реНрдЧреЛрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛, рдЕрд░реНрдерд╛рддреН, рд╕реНрдХреНрд░реЙрд▓рдбрд╡рд┐рдВрдбреЛ GtkScrolledWindow рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИред
рдЕрдЯреИрдЪрдореЗрдВрдЯ рдСрд░реНрдбрд░ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЫрд╡рд┐-> рд╕реНрдХреНрд░реЙрд▓рдбрд╡рд┐рдВрдбреЛ-> рд╡реНрдпреВрдкреЛрд░реНрдЯ-> рдмреЙрдХреНрд╕-> рдИрд╡реЗрдВрдЯрдмреЙрдХреНрд╕ -> (рдлреНрд░реЗрдо)
рдпрджрд┐ рдЖрдк рд╕реНрдХреНрд░реЙрд▓рдбрд╡рд┐рдВрдбреЛ-> рд╡реНрдпреВрдкреЛрд░реНрдЯ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЧреНрд░рд╛рдл рдХреЗрд╡рд▓ рдмрдврд╝реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдХрдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдмреЙрдХреНрд╕ рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ 3 рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ 2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред рдХрдВрдЯреЗрдирд░ рд╡рд┐рдЬреЗрдЯреНрд╕ рдореЗрдВ рдЬрд╣рд╛рдВ 1 рдЪрд╛рдЗрд▓реНрдб рд╡рд┐рдЬреЗрдЯ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ, рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП gtk_container_add рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред g_object_set рдЕрддрд┐рд░рд┐рдХреНрдд рдЧреБрдг рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реНрдХреНрд░реЙрд▓рдбрд╡рд┐рдВрдбреЛ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рд╕реНрдХреНрд░реЙрд▓ рдмрд╛рд░ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐
ред рдЖрдк GValue рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреА рдкреНрд░реЙрдкрд░реНрдЯреА рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

    GValue val = G_VALUE_INIT;
    g_value_init(&val, G_TYPE_BOOLEAN);
    g_value_set_boolean(&val, TRUE);
    gtk_container_child_set_property(GTK_CONTAINER(data->notebook), gr, "tab-expand", &val);

рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рддрдВрддреНрд░: рдкреВрд░реЗ рдЦрдВрдб рдХреЛ 100 рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╢реЗрдбреНрдпреВрд▓ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред 100 рдирдВрдмрд░ gtk_adjustment_new (0,0,110,1,5,10) рд╕реЗ 100 = 110-10 рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЖрдЧреЗ, рдорд╛рдирдХреАрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред

рдкрд╛рда рдХреЛ рдорд╛рдирдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд▓реЗрдмрд▓ рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрдВрдЧреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЛ рджрд┐рдП рдЧрдП рдлрд╝реЙрдиреНрдЯ рдФрд░ рдЙрд╕рдХреЗ рд╕реНрдерд▓рд╛рдХреГрддрд┐рдХ рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдкрд┐рдХреНрд╕реЗрд▓ рдореЗрдВ рдкрд╛рда рдХреЗ рдЖрдХрд╛рд░ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдФрд░ рдХреИрд░реЛ рдкрд░рдд рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

PangoLayout* get_width_height_of_text(char *text, char *font, float size, float *w, float *h)
{
    GdkScreen *screen = gdk_screen_get_default();
    PangoContext *context = gdk_pango_context_get_for_screen (screen);
    PangoLayout *layout = pango_layout_new (context);
    if(g_utf8_validate(text,-1,0))
    {
        pango_layout_set_text(layout,text,-1);
        PangoFontDescription *desc=pango_font_description_new();
        pango_font_description_set_family(desc,font);
        pango_font_description_set_size(desc,size*1024);
        pango_layout_set_font_description (layout, desc);
        int width=0,height=0;
        pango_layout_get_size(layout, &width, &height);
        *w=(float) width/1024;
        *h=(float) height/1024;
        pango_font_description_free(desc);
    }
    else
    {
        printf("      UTF8\n");
    }
    return layout;
}

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкрдВрдЧреЛ рдЕрдкрдиреА рдЗрдХрд╛рдЗрдпреЛрдВ рдореЗрдВ рдЖрдХрд╛рд░ рдЧрд┐рдирддрд╛ рд╣реИред рдореИрдВрдиреЗ
рдкрд╛рда рдФрд░ рдЗрд╕рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛ ред

class text_layout
{
    private:
    int fontsize;
    public:
    GString *text;
    GString *font;
    PangoLayout *layout;
    int width;
    int height;
    text_layout(char *text, char *font, int fontsize);
    void change_text_font_fontsize(char *new_text, char *new_font, int new_fontsize);
    ~text_layout();
    text_layout(float num, char *font, int fontsize);
};

рдЪрд╛рд░реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ:

class graphic_parameters
{
    private:
     text_layout y_text=text_layout(" y","Liberation Serif", 14);
     text_layout x_text=text_layout(" x","Liberation Serif", 14);
     text_layout *number=0; ///   
     float max=0;
     float min=0;
     text_layout *max_=0;
     text_layout *min_=0;

    GtkAdjustment *adj;
    GtkWidget *scrollbar;
     float gap_x=25; ///    
     float gap_y=5; ///    

    void create_axes_and_xy_labels(void);

    public:
    cairo_t *cr;
    float *massiv=0; ///  
    int len=0; /// 
    int count_in_display=0; ///   
    float multiplier_x=6;
    int offset=0;
    float x_null=0;
    float y_null=0;
    int pos=0;///  
    float margin=16;

    int callback_width;  /// 
    int callback_height;
    int widget_width;
    int widget_height;
    int scroll_height=0;
    GtkWidget *eventbox;
    GtkWidget *scrolledwindow;
    GtkWidget *image_from_surface;
    cairo_surface_t *surface;

    graphic_parameters(int width, int height);
    ~graphic_parameters();
    void resize_graphic(int new_width, int new_height);
    void create_one_dimensional_graphic(float *massiv, int size);
    void update_graphic(int offset);
    void change_graphic_adj(void);
    void create_vertical_line(void);
};

рдпрд╣ рд╡рд░реНрдЧ рдореБрдЦреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд░реНрдЧ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИред
class externals
{
    public:
    graphic_parameters *param;
    externals();
};

class appdata : public externals
{
    public:
    char *glade_name=(char*)"window.glade";
    GtkApplication *app;
    GtkWidget *win;
    GtkNotebook *notebook;
    GtkMenuBar *menubar;
    appdata();
};

рдпрд╣реА рд╣реИ, рдЬрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЧреНрд░рд╛рдлрд┐рдХ_рдкреИрд░рдореАрдЯрд░ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ NULL, 0 рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рдХреЗ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдЖрд░рдореНрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореБрдЦреНрдп рдХрдард┐рдирд╛рдИ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдбреАрдмрдЧ рдХрд░рдирд╛ рдерд╛ред Segfaults 3 рдмрд╛рд░ рд╣реБрдЖ: рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрдВ 2 рдмрд╛рд░ FALSE рдЫреВрдЯ рдЧрдпрд╛ рдФрд░ redraw рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕рд░рдгреА рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдХреНрдпреВрдЯреА рдореЗрдВ рдкреНрд▓реЙрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рддреИрдпрд╛рд░ рдХреНрдпреВрд╕реАрдореЛрдЯрдкреНрд▓реЙрдЯ рдХреНрд▓рд╛рд╕ рд╣реИ, рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд╣реИрдВред

рдЬреАрдердм рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ


All Articles