Missatge de David Gasa i Castell <dgasac...@gmail.com> del dia dv., 16 d’abr. 2021 a les 19:54:
> > > Missatge de David Gasa i Castell <dgasac...@gmail.com> del dia dv., 16 > d’abr. 2021 a les 17:54: > >> I'm recently migrated to Gtk+-4 & Gtkmm-4.0, dued mainly to the >> height-for-width trouble mentioned one week ago. >> >> The problem is that I don't see the way to verify that height-for-width >> feature is back again in a treeview cell rows. >> >> If so, I need help to find out the changes that should be implemented in >> the code attached below to see how the text fits above, in the same cell, >> when the column size is been reduced. >> >> ---- code ----- >> >> #include <gtkmm.h> >> #include <map> >> >> class MyWindow >> : >> public Gtk::Window >> { >> public: >> >> MyWindow(); >> virtual ~MyWindow(); >> >> private: >> >> void fill_treeview(); >> >> void wrap_col (Gtk::TreeViewColumn *, Gtk::CellRendererText *); >> >> std::map<gint, Glib::ustring> messages; >> >> // Gtkmm widgets >> >> Gtk::Box box; >> >> Gtk::TreeView treeview; >> >> Gtk::Separator separator; >> Gtk::Button button; >> >> class ModelColumns >> : >> public Gtk::TreeModel::ColumnRecord >> { >> public: >> >> ModelColumns() >> { >> add (id); >> add (message); >> } >> >> Gtk::TreeModelColumn<gint> id; >> Gtk::TreeModelColumn<Glib::ustring> message; >> } >> model_cols; >> >> Glib::RefPtr<Gtk::ListStore> refListStore; >> >> Gtk::TreeRow row; >> }; >> >> MyWindow::MyWindow() >> : >> box (Gtk::Orientation::VERTICAL, 5), >> button ("Close"), >> >> messages ({ >> {1, "Message: one"}, >> {2, "Message: one two"}, >> {3, "Message: one two three"}, >> {4, "Message: one two three four"} >> }), >> >> refListStore (Gtk::ListStore::create (model_cols)) >> { >> set_title ("MyWindow"); >> >> treeview.set_model (refListStore); >> >> treeview.append_column ("Id.", model_cols.id); >> >> gint m_col = >> treeview.append_column ("Message", model_cols.message)-1; >> >> if (Gtk::TreeViewColumn * cl_message = treeview.get_column (m_col)) >> { >> cl_message->connect_property_changed ("width", >> sigc::bind (sigc::mem_fun (*this, &MyWindow::wrap_col), cl_message, >> dynamic_cast<Gtk::CellRendererText *>(treeview.get_column_cell_renderer >> (m_col)))); >> } >> >> treeview.set_vexpand(); >> treeview.set_margin (10); >> >> button.set_margin (10); >> >> box.append (treeview); >> box.append (separator); >> box.append (button); >> >> button.signal_clicked().connect (sigc::mem_fun (*this, >> &Gtk::Widget::hide)); >> >> set_child (box); >> >> fill_treeview(); >> } >> >> void >> MyWindow::fill_treeview() >> { >> if (!refListStore->children().empty()) >> refListStore->clear(); >> >> for (auto & it : messages) >> { >> row = *(refListStore->append()); >> >> row[model_cols.id] = it.first; >> row[model_cols.message] = it.second; >> } >> } >> >> void >> MyWindow::wrap_col ( >> Gtk::TreeViewColumn * _column, Gtk::CellRendererText * _cell_renderer) >> { >> _cell_renderer->property_wrap_mode() = Pango::WrapMode::WORD; >> >> gint width = _column->get_width(); >> _cell_renderer->property_wrap_width() = width; >> } >> >> MyWindow::~MyWindow() >> { >> } >> >> int main (int argc, char* argv[]) >> { >> auto app = Gtk::Application::create ("org.gtkmm"); >> return app->make_window_and_run<MyWindow>(argc, argv); >> } >> >> -- >> David Gasa i Castell >> >> Linux User #488832 >> > > By these changes seems to be possible to reduce the column size and the > text breaks fine (word wrapping)... > > if (Gtk::TreeViewColumn * cl_message = treeview.get_column (m_col)) > { > cl_message->set_fixed_width (0); > cl_message->set_min_width (0); > > cl_message->connect_property_changed ("width", > sigc::bind (sigc::mem_fun (*this, &MyWindow::wrap_col), cl_message, > dynamic_cast<Gtk::CellRendererText *>(treeview.get_column_cell_renderer > (m_col)))); > } > > But the rest of text line is hidden, getting something like, > > ================= > Id Messages > ================= > 1 Message: one > ================= > 2 Message: one > ================= > 3 Message: one > ================= > 4 Message: one > ================= > > How could I do to get as follows ? > > ================= > Id Messages > ================= > 1 Message: one > ================= > 2 Message: one > two > ================= > 3 Message: one > two three > ================= > 4 Message: one > two three four > ================= > I found that I was probably wrong implementing the callback to wrap_col. This solution fits the text better, if (Gtk::TreeViewColumn * cl_message = treeview.get_column (m_col)) { Gtk::CellRendererText * c_message = dynamic_cast<Gtk::CellRendererText *>(treeview.get_column_cell_renderer (m_col)); c_message->property_wrap_mode() = Pango::WrapMode::WORD; c_message->property_wrap_width() = cl_message->get_width(); } The question now is to find how to clean the extra space before and after text in cells. -- David Gasa i Castell Linux User #488832
_______________________________________________ gtkmm-list mailing list gtkmm-list@gnome.org https://mail.gnome.org/mailman/listinfo/gtkmm-list