//------------------------------------------------------------------------------ const StringColumn& ColumnsModel::append_markup_column(const int bec_tm_idx, const std::string& name, const Iconic have_icon) { Gtk::TreeModelColumn<Glib::RefPtr<Gdk::Pixbuf>>* icon = 0; Gtk::TreeViewColumn* column = Gtk::manage(new Gtk::TreeViewColumn(base::replaceString(name, "_", "__"))); if (have_icon == WITH_ICON) { icon = new Gtk::TreeModelColumn<Glib::RefPtr<Gdk::Pixbuf>>; add(*icon); add_bec_index_mapping(bec_tm_idx); column->pack_start(*icon, false); _columns.push_back(icon); } Gtk::TreeModelColumn<Glib::ustring>* col = new Gtk::TreeModelColumn<Glib::ustring>; Gtk::CellRendererText* cell = Gtk::manage(new Gtk::CellRendererText()); add(*col); add_bec_index_mapping(bec_tm_idx); column->pack_start(*cell); column->add_attribute(cell->property_markup(), *col); _columns.push_back(col); int nr_of_cols = _treeview->append_column(*column); _treeview->get_column(nr_of_cols - 1)->set_resizable(true); return *col; }
ContactsTreeWidget::ContactsTreeWidget(BaseObjectType* baseObject, const Glib::RefPtr<Gnome::Glade::Xml>& refGlade) : Gtk::TreeView(baseObject) { appInstance->logEvent("ContactsTreeWidget::ContactsTreeWidget()", SEVERITY_DEBUG); treeModel = Gtk::TreeStore::create(columns); // sort by status codes. // STATUS_OFFLINE is 0, so it will always be at bottom of the list treeModel->set_sort_column(columns.contactStatus, Gtk::SORT_DESCENDING); set_model(treeModel); set_search_equal_func(sigc::mem_fun(*this, &ContactsTreeWidget::onSearchEqual)); // appending columns gint colCount; Gtk::TreeViewColumn* pColumn; Gtk::CellRenderer* renderer; Gtk::CellRendererPixbuf *avatarRenderer, *statusRenderer; Gtk::CellRendererText *textRenderer; statusRenderer = Gtk::manage(new Gtk::CellRendererPixbuf); statusRenderer->property_xalign() = 0.0; colCount = append_column(_("Status"), *statusRenderer); pColumn = get_column(colCount - 1); pColumn->add_attribute(statusRenderer->property_pixbuf(), columns.statusImage); textRenderer = Gtk::manage(new Gtk::CellRendererText); textRenderer->property_xalign() = 0.0; colCount = append_column(_("Nickname"), *textRenderer); pColumn = get_column(colCount - 1); pColumn->set_resizable(true); pColumn->add_attribute(textRenderer->property_markup(), columns.contactNickname); avatarRenderer = Gtk::manage(new Gtk::CellRendererPixbuf); avatarRenderer->property_xalign() = 1.0; avatarRenderer->property_xpad() = 10; colCount = append_column("", *avatarRenderer); pColumn = get_column(colCount - 1); pColumn->add_attribute(avatarRenderer->property_pixbuf(), columns.contactAvatar); // connecting signal handlers signal_row_activated().connect(sigc::mem_fun(*this, &ContactsTreeWidget::contactsTreeOnActivate)); appInstance->sigServer->signal_user_status().connect(sigc::mem_fun(*this, &ContactsTreeWidget::onStatusChange)); }
void SearchNotesWidget::notebook_text_cell_data_func(Gtk::CellRenderer * renderer, const Gtk::TreeIter & iter) { Gtk::CellRendererText *crt = dynamic_cast<Gtk::CellRendererText*>(renderer); crt->property_ellipsize() = Pango::ELLIPSIZE_END; notebooks::Notebook::Ptr notebook; iter->get_value(0, notebook); if(!notebook) { crt->property_text() = ""; return; } crt->property_text() = notebook->get_name(); if(dynamic_pointer_cast<notebooks::SpecialNotebook>(notebook)) { // Bold the "Special" Notebooks crt->property_markup() = Glib::ustring::compose("<span weight=\"bold\">%1</span>", notebook->get_name()); } else { crt->property_text() = notebook->get_name(); } }
// Cringe. void GtkTorrentSideBar::setupColumns() { int cid = 0; Gtk::TreeViewColumn *col = nullptr; Gtk::CellRendererText *cell = Gtk::manage(new Gtk::CellRendererText()); Gtk::CellRendererPixbuf *cellp = Gtk::manage(new Gtk::CellRendererPixbuf()); cell->set_alignment(0, 0.5); cell->signal_edited().connect([this](const std::string& path,const std::string& name){ addedItem(path, name); }); cid = append_column(*Gtk::manage(new Gtk::TreeViewColumn("Name"))); col = get_column(cid - 1); col->pack_start(*cellp); col->pack_start(*cell); col->add_attribute(cell->property_markup(), m_cols.name); col->add_attribute(cell->property_editable(), m_cols.editable); col->add_attribute(cellp->property_pixbuf(), m_cols.icon); // This really isn't "setupColumns" anymore from this point. // TODO Move to own function m_torrent_row = *(m_liststore->append()); m_torrent_row[m_cols.name] = "Torrents"; m_torrent_row[m_cols.editable] = false; m_torrent_row[m_cols.clickCallback] = [](){}; // clicks on titles don't do shit auto torrent_icon = Gdk::Pixbuf::create_from_resource("/org/gtk/gtorrent/icon-torrent.png"); auto torrent_icon_scaled = torrent_icon->scale_simple(16, 16, Gdk::INTERP_BILINEAR); m_torrent_row[m_cols.icon] = torrent_icon_scaled; // XXX TMP WILL REMOVE AND REPLACE WITH PROPER FUNCTION // Yes this is horrible. Bear with it for now. auto g = Application::getSingleton()->getCore()->getAllTorrents(); Gtk::TreeModel::Row row = *(m_liststore->append(m_torrent_row.children())); row[m_cols.name] = "All"; row[m_cols.title] = "All"; row[m_cols.group] = g; row[m_cols.group_vector] = &g->m_torrents_all; Gtk::TreeModel::Row row2 = *(m_liststore->append(row.children())); row2[m_cols.name] = "Downloading"; row2[m_cols.title] = "Downloading"; row2[m_cols.group_vector] = &g->m_torrents_downloading; row2 = *(m_liststore->append(row.children())); row2[m_cols.name] = "Seeding"; row2[m_cols.title] = "Seeding"; row2[m_cols.group_vector] = &g->m_torrents_seeding; row2 = *(m_liststore->append(row.children())); row2[m_cols.name] = "Checking"; row2[m_cols.title] = "Checking"; row2[m_cols.group_vector] = &g->m_torrents_checking; row2 = *(m_liststore->append(row.children())); row2[m_cols.name] = "Finished"; row2[m_cols.title] = "Finished"; row2[m_cols.group_vector] = &g->m_torrents_finished; row2 = *(m_liststore->append(row.children())); row2[m_cols.name] = "Stopped"; row2[m_cols.title] = "Stopped"; row2[m_cols.group_vector] = &g->m_torrents_stopped; row2 = *(m_liststore->append(row.children())); row2[m_cols.name] = "Paused"; row2[m_cols.title] = "Paused"; row2[m_cols.group_vector] = &g->m_torrents_paused; // End of new horrible code // Continue horrible code from before //row = *(m_liststore->append(m_torrent_row.children())); //row[m_cols.name] = "Add a label"; //row[m_cols.editable] = true; //row[m_cols.icon] = Gtk::IconTheme::get_default()->lookup_icon("list-add-symbolic", 16, Gtk::ICON_LOOKUP_USE_BUILTIN).load_icon(); //row[m_cols.clickCallback] = [row](){}; m_rssfeed_row = *(m_liststore->append()); m_rssfeed_row[m_cols.name] = "RSS Feeds"; m_rssfeed_row[m_cols.editable] = false; m_rssfeed_row[m_cols.clickCallback] = [](){}; auto rss_icon = Gdk::Pixbuf::create_from_resource("/org/gtk/gtorrent/icon-rss.png"); auto rss_icon_scaled = rss_icon->scale_simple(16, 16, Gdk::INTERP_BILINEAR); m_rssfeed_row[m_cols.icon] = rss_icon_scaled; for(auto fg : Application::getSingleton()->getCore()->m_feeds) { row = *(m_liststore->append(m_rssfeed_row.children())); row[m_cols.name] = fg->name; row[m_cols.editable] = false; // TODO change icon to some sort of generic RSS icon row[m_cols.clickCallback] = [this, fg](){m_rss->run(fg->name);m_rss->hide();}; } row = *(m_liststore->append(m_rssfeed_row.children())); row[m_cols.name] = "Add an RSS group"; row[m_cols.editable] = true; row[m_cols.icon] = Gtk::IconTheme::get_default()->lookup_icon("list-add-symbolic", 16, Gtk::ICON_LOOKUP_USE_BUILTIN).load_icon(); row[m_cols.clickCallback] = [row](){}; //Maybe migrate settings there /* row = *(m_liststore->append()); row[m_cols.name] = "Settings"; row[m_cols.title] = true; row[m_cols.clickCallback] = [](){}; // clicks on titles don't do shit*/ }