Hello guys,

Crazy to find out how to force the message lines of inside the "Problem
Attached Code" wrapping when data in a treeview model becomes longer than
the original/previous column size.
Can prevent the column grows each time of model updates ???

Any help/idea ??

*** Problem Attached Code ***

#include <gtkmm.h>
#include <iostream>
#include <vector>

class MyWindow
:
    public Gtk::Window
{
public:

    MyWindow();
    virtual ~MyWindow();

private:

    void fill_data();

    void on_button_next_clicked();

    std::vector<Glib::ustring> messages;
    gint current_idx;

    // * * * *

    Gtk::Grid grid;

    Gtk::ScrolledWindow scrolled;
    Gtk::TreeView treeview;

    Gtk::ButtonBox buttonbox;
    Gtk::Button bt_close;
    Gtk::Button bt_next;

    class ModelColumns
    :
        public Gtk::TreeModel::ColumnRecord
    {
    public:

        ModelColumns()
        {
            add (id);
            add (message);
        }

        Gtk::TreeModelColumn<gint> id;
        Gtk::TreeModelColumn<Glib::ustring> message;
    }
        model_columns;

    Gtk::TreeRow row;

    Glib::RefPtr<Gtk::ListStore> refModelColumns;
};

MyWindow::MyWindow()
:
    current_idx (0),

    messages ({
                "Little message",
                "This is a bit longer message",
                "You have just written a very long, long, long... message"
            }),

    bt_close ("Close"),
    bt_next ("Next"),

    refModelColumns (Gtk::ListStore::create (model_columns))
{
    set_title ("Col Width Test");
    set_border_width (5);

    treeview.set_model (refModelColumns);
    treeview.set_hexpand();
    treeview.set_vexpand();

    treeview.append_column ("Id", model_columns.id);
    treeview.append_column ("Message", model_columns.message);

    scrolled.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
    scrolled.add (treeview);

    buttonbox.set_layout (Gtk::BUTTONBOX_END);
    buttonbox.set_spacing (5);
    buttonbox.set_hexpand();

    buttonbox.pack_start (bt_close);
    buttonbox.pack_start (bt_next);

    bt_close.signal_clicked().connect (
        sigc::mem_fun (*this, &MyWindow::hide));

    bt_next.signal_clicked().connect (
        sigc::mem_fun (*this, &MyWindow::on_button_next_clicked));

    grid.set_row_spacing (5);

    grid.attach (scrolled, 0, 0, 1, 1);
    grid.attach (buttonbox, 0, 1, 1, 1);

    add (grid);

    fill_data();

    show_all_children();
}

void
MyWindow::fill_data()
{
    if (!refModelColumns->children().empty())
        refModelColumns->clear();

    if ((current_idx < 0) or
            (current_idx >= messages.size()))
        current_idx = 0;

    if (!messages.empty())
    {
        row = *(refModelColumns->append());

        row[model_columns.id] = current_idx;
        row[model_columns.message] = messages[current_idx];
    }
}

void
MyWindow::on_button_next_clicked()
{
    current_idx++;

    if ((current_idx < 0) or
            (current_idx >= messages.size()))
        current_idx = 0;

    fill_data();
}

MyWindow::~MyWindow()
{
}

int main (int argc, char *argv[])
{
    Glib::RefPtr<Gtk::Application> app =
        Gtk::Application::create (argc, argv, "org.gtkmm.example");

    MyWindow my_window;

    return app->run (my_window);
}
_______________________________________________
gtkmm-list mailing list
gtkmm-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtkmm-list

Reply via email to