# frozen_string_literal: true # -*- ruby -*- # # Copyright (C) 2007 kksou # Copyright (C) 2008,2009 Cathal Mc Ginley # Copyright (C) 2011, 2014, 2016 Matijs van Zuijlen # # Alexandria is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of the # License, or (at your option) any later version. # # Alexandria is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public # License along with Alexandria; see the file COPYING. If not, # write to the Free Software Foundation, Inc., 51 Franklin Street, # Fifth Floor, Boston, MA 02110-1301 USA. # Please retain the following note: # # Based upon Recipe 168 - "How to display tooltips in GtkTreeView - Part 3" # from the "php-gtk2 Cookbook" website, by kksou. # http://www.kksou.com/php-gtk2/articles/display-tooltips-in-GtkTreeView---Part-3---no-hardcoding-of-header-height.php # # Ported to ruby-gtk2 (and modified for IconView) by Cathal Mc Ginley require 'cgi' class IconViewTooltips include Alexandria::Logging def initialize(view) set_view(view) end def set_view(view) view.has_tooltip = true view.signal_connect('query-tooltip') do |_widget, x, y, _keyboard_mode, tooltip| tree_path = view.get_path_at_pos(x, y) if tree_path iter = view.model.get_iter(tree_path) title = iter[2] # HACK: hardcoded, should use column names... authors = iter[4] publisher = iter[6] year = iter[7] tooltip.set_markup label_for_book(title, authors, publisher, year) end end end def label_for_book(title, authors, publisher, year) # This is much too complex... but it works for now! html = '' unless title.empty? html += "#{CGI.escapeHTML(title)}" html += "\n" unless authors.empty? end html += "#{CGI.escapeHTML(authors)}" unless authors.empty? html += "\n" if !title.empty? || !authors.empty? html += '' html += CGI.escapeHTML(publisher).to_s if publisher && !publisher.empty? if year && !year.empty? html += ' ' if publisher && !publisher.empty? html += "(#{year})" end html + '' end end